Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
SourceMessageNotAvailable
Kod błędu
steps.messagevalidation.SourceMessageNotAvailable
Treść odpowiedzi na błąd
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
Przykładowa treść odpowiedzi na błąd
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
Przyczyna
Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> zasady SOAPMessageValidation jest:
- poza zakresem (niedostępne w określonym procesie, w którym jest wykonywana zasada) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
Ten błąd występuje na przykład wtedy, gdy element <Source> w zasadach SOAPMessageValidation jest ustawiony na zmienną, która nie istnieje w przepływie, w którym są wykonywane zasady.
Diagnostyka
Określ nazwę zasady SOAPMessageValidation, w której występuje błąd, oraz nazwę zmiennej
sourcez ciągu błędów. Na przykład w tym ciągu błędu nazwa zasady SOAPMessageValidation toSOAP-Message-Validation-1, a zmiennasourcetorequest:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"W pliku XML nieudanej zasady SOAPMessageValidation sprawdź, czy nazwa zmiennej ustawionej w elemencie
<Source>jest zgodna z nazwą zmiennej podaną w ciągu błędu (krok 1 powyżej).Na przykład poniższe zasady SOAPMessageValidation określają zmienną o nazwie
requestw elemencie<Source>, która odpowiada ciągowi błędu:<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>Sprawdź, czy zmienna użyta w elemencie
<Source>jest zdefiniowana i dostępna w przepływie, w którym wykonywane są zasady SOAPMessageValidation.Jeśli zmienna ma wartość:
- poza zakresem (niedostępne w określonym procesie, w którym są wykonywane zasady) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
wtedy to jest przyczyną błędu.
Załóżmy na przykład, że zasada SOAPMessageValidation pokazana powyżej jest wykonywana w przepływie odpowiedzi. Zmienna
requestużyta w przykładzie elementu<Source>powyżej jest jednak dostępna tylko w przypadku przepływu żądania.Ponieważ zmienna
requestnie występuje w przepływie odpowiedzi, otrzymasz ten błąd:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Rozdzielczość
Sprawdź, czy zmienna ustawiona w elemencie <Source> nieudanej zasady SOAPMessageValidation jest zdefiniowana i istnieje w przepływie, w którym jest wykonywana.
Aby poprawić powyższy przykład, możesz zmodyfikować element <Source> tak, aby używał zmiennej response, która występuje w przepływie odpowiedzi:
<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
Kod błędu
steps.messagevalidation.NonMessageVariable
Treść odpowiedzi na błąd
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
Przykładowa treść odpowiedzi na błąd
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
Przyczyna
Ten błąd występuje, jeśli element <Source> w zasadach SOAPMessageValidation jest ustawiony na zmienną, która nie jest typu Message.
Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Apigee Edge request, response i message są typu Message. Więcej informacji o zmiennych w wiadomościach znajdziesz w dokumentacji zmiennych.
Diagnostyka
Na podstawie ciągu błędu określ nazwę zmiennej, która nie jest rozpoznawana jako typ wiadomości. Na przykład w tym ciągu błędu nazwa zmiennej to
message.content:"faultstring": "Variable message.content does not resolve to a Message"Sprawdź wszystkie zasady SOAPMessageValidation w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. Może istnieć co najmniej jedna zasada SOAPMessageValidation. Określ konkretne zasady SOAPMessageValidation, w których zmienna określona w elemencie
<Source>pasuje do nazwy zmiennej zidentyfikowanej w ciągu błędu (krok 1 powyżej).Na przykład ta zasada ustawia element
<Source>na zmienną o nazwiemessage.content, która odpowiada ciągowi błędu:<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>Ponieważ zmienna
message.contentnie jest typu Message, pojawi się błąd:"faultstring": "Variable message.content does not resolve to a Message"
Rozdzielczość
Sprawdź, czy element <Source> w zasadach SOAPMessageValidation, które nie zostały wykonane, jest ustawiony na zmienną typu Message, która występuje w przepływie, w którym są wykonywane zasady.
Aby poprawić zasady, możesz zmodyfikować element <Source>, aby określić zmienną typu Message. Na przykład w przypadku nieudanej zasady SOAPMessageValidation możesz określić element <Source> jako 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>
Niepowodzenie
Kod błędu
steps.messagevalidation.Failed
Treść odpowiedzi na błąd
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
Przykładowa treść odpowiedzi na błąd
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Przyczyna
Ten błąd występuje, gdy zasada SOAPMessageValidation nie może zweryfikować ładunku wiadomości wejściowej na podstawie schematu XSD lub definicji WSDL. Może się też pojawić, jeśli w wiadomości z ładunkiem występuje nieprawidłowy format JSON lub XML.
Oto niektóre z możliwych przyczyn tego błędu:
| Przyczyna | Opis |
| Niezgodny ładunek XML | Wejściowy ładunek XML nie jest zgodny ze schematem XSD określonym w zasadach SoapMessageValidation. |
| Niezgodność ładunku SOAP | Wejściowy ładunek SOAP nie jest zgodny z definicją WSDL określoną w zasadach SoapMessageValidation. |
| Nieprawidłowy format JSON lub XML | Wejściowy ładunek SOAP nie zawiera prawidłowego kodu XML ani JSON. |
Przyczyna: niezgodny ładunek XML
Ten błąd występuje, jeśli wejściowy ładunek XML nie jest zgodny ze schematem XSD określonym w elemencie <ResourceURL> zasady SoapMessageValidation.
Przykładowy komunikat o błędzie
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnostyka
Określ nazwę zasady SOAPMessageValidation, przyczynę niepowodzenia i numer wiersza, w którym ładunek XML nie pasuje do schematu XSD. Wszystkie te informacje znajdują się w ciągu tekstowym błędu. Na przykład w tym ciągu błędu nazwa zasady SOAPMessageValidation to
SOAP-Message-Validation-1,, powód niepowodzenia toExpecting a child element but found none [Line 9], a numer wiersza to9."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""Sprawdź zasadę SOAPMessageValidation i upewnij się, że do weryfikowania wiadomości używa ona pliku definicji schematu XSD. Na przykład te zasady SOAPMessageValidation mają plik zasobu XSD w elemencie
<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>Sprawdź ładunek wejściowy w wierszu o numerze podanym w kroku 1, aby dowiedzieć się, co spowodowało błąd.
Przykładowy wejściowy ładunek 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>W przykładzie powyżej wiersz 9 zawiera tag zamykający
</shipTo>.Sprawdź plik definicji schematu XML
Script-1.xsdużywany w zasadach SOAPMessageValidation, aby zobaczyć, jak powinien wyglądać element<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> ...Zgodnie z przykładowym schematem XSD używanym do weryfikacji element
<shipTo>musi zawierać elementy podrzędne<name>,<street>,<address>i<country>. Wejściowy ładunek XML zawiera jednak tylko 1 element podrzędny,<name>. W rezultacie pojawia się błąd:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Rozdzielczość
Ten błąd weryfikacji możesz rozwiązać na 2 sposoby:
Rozwiązanie 1
Jeśli stwierdzisz, że definicja schematu XSD nakłada niepotrzebne ograniczenia i w elemencie <shipTo> wymagany jest tylko element podrzędny <name>, możesz zmodyfikować element Script-1.xsd używany w zasadach SOAPMessageValidation. Aby sprawdzić poprawność powyższego przykładu ładunku, możesz zmodyfikować plik XSD w ten sposób:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Rozwiązanie 2
Jeśli plik definicji XSD jest prawidłowy, można zmienić wejściowy ładunek XML, aby pasował do xsd. Możesz na przykład zmodyfikować ładunek, aby był zgodny z xsd w ten sposób:
<?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>
Przyczyna: niezgodny ładunek SOAP
Ten błąd występuje, jeśli wejściowy ładunek SOAP nie jest zgodny z definicją WSDL określoną w elemencie <ResourceURL> zasady SoapMessageValidation.
Przykładowy komunikat o błędzie
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnostyka
Określ nazwę zasady SOAPMessageValidation, przyczynę błędu i numer wiersza, w którym ładunek SOAP nie pasuje do definicji WSDL. Wszystkie te informacje znajdziesz w ciągu błędu. Na przykład w tym ciągu błędów nazwa zasady SOAPMessageValidation to
SOAP-Message-Validation-1, przyczyna niepowodzenia to\"Element name mismatch. Wildcard? [Line 11]\"", a numer wiersza to11:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""Sprawdź zasadę SOAPMessageValidation i upewnij się, że do weryfikowania wiadomości używa ona schematu
wsdl. Na przykład te zasady SOAPMessageValidation mają plik zasobuwsdlw elemencie<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>Sprawdź ładunek wejściowy w wierszu o numerze podanym w kroku 1, aby dowiedzieć się, co spowodowało błąd.
Przykładowy ładunek 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>W przykładzie powyżej w wierszu 11 element podrzędny
<country>znajduje się w elemencie<shipTo>.Sprawdź plik definicji WSDL,
SOAP-Message-Validation-1.wsdl, używany w zasadach SOAPMessageValidation, aby zobaczyć, co może być nie tak z elementem podrzędnym<country>w elemencie<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> ...Zgodnie z definicją WSDL używaną do weryfikacji element
<shipTo>nie ma elementu podrzędnego<country>. W rezultacie pojawia się błąd:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Rozdzielczość
Ten błąd weryfikacji możesz rozwiązać na 2 sposoby:
Rozwiązanie 1
Jeśli stwierdzisz, że użyta definicja WSDL jest nieprawidłowa, możesz zmienić SOAP-Message-Validation-1.wsdl użyty w zasadzie SOAPMessageValidation. Aby zweryfikować powyższy przykład ładunku, możesz zmodyfikować plik w ten sposób:
...
<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>
Rozwiązanie 2
Jeśli definicja WSDL jest prawidłowa, można zmienić wejściowy ładunek SOAP, aby pasował do definicji WSDL.
Możesz na przykład zmodyfikować wejściowy ładunek SOAP w ten sposób:
<?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>
Przyczyna: nieprawidłowy format JSON lub XML
Ten błąd występuje, jeśli wejściowy ładunek SOAP nie jest zgodny z definicją WSDL określoną w elemencie <ResourceURL> zasady SoapMessageValidation.
Przykładowy komunikat o błędzie
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnostyka
Określ nazwę zasady SOAPMessageValidation, przyczynę niepowodzenia i numer wiersza ładunku XML, który nie pasuje do definicji WSDL. Wszystkie te informacje znajdziesz w ciągu błędu. Na przykład w tym ciągu błędów nazwa zasady SOAPMessageValidation to
SOAP-Message-Validation-1, przyczyna niepowodzenia toExpected </title> at line 15(possibly around char 420):, a numer wiersza to15.."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""Sprawdź ładunek wejściowy w wierszu o numerze podanym w kroku 1, aby dowiedzieć się, co spowodowało błąd.
Przykładowy ładunek 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>W powyższym przykładzie w wierszu 15 wejściowego pliku XML znajduje się element
<title>, ale nie jest on zamknięty tagiem końcowym</title>.
Rozdzielczość
Aby rozwiązać ten błąd, sprawdź, czy ładunek wejściowy jest prawidłowy i poprawnie sformatowany.
Możesz na przykład zmodyfikować wejściowy ładunek XML w ten sposób:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...