Wyświetlasz dokumentację Apigee Edge.
Wyświetl dokumentację
Apigee X.
Komunikat źródłowy niedostępny
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>
w zasadzie SOAPMessageValidation jest:
- Poza zakresem (opcja niedostępna w konkretnym przepływie, w którym jest wykonywana zasada) lub
- nie można rozwiązać problemu (nie jest określony)
Ten błąd występuje na przykład wtedy, gdy element <Source>
w zasadzie SOAPMessageValidation jest ustawiony na zmienną, która nie istnieje w procesie, w którym jest wykonywana.
diagnostyki,
Zidentyfikuj nazwę zasady SOAPMessageValidation w miejscu wystąpienia błędu i nazwę zmiennej
source
. Na przykład w ciągu tego ciągu błędów nazwa zasady SOAPMessageValidation toSOAP-Message-Validation-1
, a zmiennasource
torequest
:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
W pliku XML zasady SOAPMessagewalid sprawdź, czy nazwa zmiennej ustawiona w elemencie
<Source>
jest zgodna z nazwą zmiennej określoną w ciągu błędu (patrz krok 1 powyżej).Na przykład ta zasada SOAPMessageValidation określa zmienną o nazwie
request
w elemencie<Source>
, która pasuje do zawartości ciągu 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żywana w elemencie
<Source>
jest zdefiniowana i dostępna w procesie, w którym wykonywana jest zasada SOAPMessageValidation.Jeśli zmienna:
- poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
- nie można rozwiązać problemu (nie jest określony)
to jest przyczyna błędu.
Załóżmy na przykład, że wyświetlana powyżej zasada SOAPMessageValidation jest wykonywana w odpowiedzi. Zmienna
request
używana w powyższym przykładzie<Source>
jest jednak dostępna tylko w ramach przepływu żądania.Zmienna
request
nie istnieje w przepływie odpowiedzi, więc pojawia się ten błąd:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Rozwiązanie
Upewnij się, że zmienna ustawiona w elemencie <Source>
w nieudanej zasadzie SOAPMessagewalidacji jest zdefiniowana i istnieje w procesie, w którym wykonywana jest zasada.
Aby poprawić przykład powyżej, możesz zmodyfikować element <Source
> tak, aby używał zmiennej response
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>
Zmienna braku wiadomości
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 zasadzie SOAPMessageValidation jest ustawiony na zmienną innego typu niż Message.
Zmienne typów wiadomości reprezentują wszystkie żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Apigee request
, response
i message
są typu Wiadomości. Więcej informacji o zmiennych wiadomości znajdziesz w przewodniku po zmiennych.
diagnostyki,
Z ciągu błędu wybierz nazwę zmiennej, która nie jest rozpoznawana jako typ wiadomości. Na przykład w tym ciągu znaków błędu nazwa zmiennej to
message.content
:"faultstring": "Variable message.content does not resolve to a Message"
Sprawdź wszystkie zasady SOAPMessageValidation w określonym interfejsie API serwera proxy, w przypadku którego wystąpił błąd. Może istnieć co najmniej 1 zasada SOAPMessageValidation. Określ konkretne zasady lub zasady SOAPMessageValidation, w których zmienna podana w elemencie
<Source>
odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej).Na przykład ta zasada ustawia element
<Source>
na zmienną o nazwiemessage.content
, która pasuje do zawartości ciągu 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>
Zmienna
message.content
nie jest typu wiadomości, więc pojawia się błąd:"faultstring": "Variable message.content does not resolve to a Message"
Rozwiązanie
Upewnij się, że element <Source>
w zasadzie nieudanej weryfikacji SOAPMessageValidation jest ustawiony na zmienną Message istniejącą w procesie, w którym jest wykonywana zasada.
Aby poprawić zasadę, możesz zmodyfikować element <Source>
, aby określić zmienną typu Wiadomość. 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, jeśli zasada SOAPMessageValidation nie pozwala sprawdzić poprawności ładunku wejściowego w odniesieniu do schematu XSD lub definicji WSDL. Błąd ten występuje też, jeśli w ładunku znajduje się nieprawidłowy format JSON lub XML.
Oto kilka możliwych przyczyn tego błędu:
Przyczyna | Opis |
Niezgodny ładunek XML | Podany ładunek XML jest niezgodny ze schematem XSD określonym w zasadzie SoapMessageValidation. |
Niezgodność ładunku SOAP | Dane wejściowe SOAP są niezgodne z definicją WSDL określoną w zasadzie SoapMessageValidation. |
Nieprawidłowy format JSON lub XML | Dane wejściowe SOAP nie zawierają poprawnie sformatowanego kodu XML lub JSON. |
Przyczyna: niezgodność ładunku XML
Ten błąd występuje, jeśli podany ładunek XML jest niezgodny 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"
}
}
}
diagnostyki,
Określ nazwę zasady SOAPMessageValidation, przyczynę błędu i numer wiersza, dla którego ładunek XML nie pasuje do schematu XSD. Wszystkie te informacje znajdują się w ciągu znaków błędu. Na przykład w ciągu tego ciągu błędów nazwa zasady SOAPMessageValidation jest
SOAP-Message-Validation-1,
przyczyna niepowodzenia:Expecting 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 używa ona pliku definicji schematu XSD do weryfikacji wiadomości. Na przykład ta zasada SOAPMessageValidation zawiera 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 podanym w kroku 1 powyżej, aby dowiedzieć się, co było przyczyną błędu.
Przykładowy ładunek XML wejściowy
<?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 powyższym przykładzie wiersz 9 zawiera tag końcowy
</shipTo>
.Sprawdź plik definicji schematu XML,
Script-1.xsd
używany w zasadzie SOAPMessageValidation, aby zobaczyć, jak element<shipTo>
powinien wyglądać:... <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 elementem XSD użytym do weryfikacji element
<shipTo>
musi zawierać elementy podrzędne<name>
,<street>
,<address>
i<country>
. Jednak wejściowy ładunek XML ma tylko 1 element podrzędny:<name>
. W efekcie pojawia się ten błąd:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Rozwiązanie
Ten błąd weryfikacji możesz rozwiązać na 2 sposoby:
Rozwiązanie 1
Jeśli stwierdzisz, że definicja schematu XSD powoduje niepotrzebne ograniczenia, a element <shipTo>
wymaga tylko elementu podrzędnego <name>
, możesz zmienić Script-1.xsd
używane w zasadzie SOAPMessageValidation. Aby zweryfikować przykładowy ładunek powyżej, 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 nr 2
Jeśli plik definicji XSD jest poprawny, dane wejściowe XML można zmienić, aby pasowały do xsd
. Możesz na przykład zmodyfikować ładunek tak, aby był zgodny z 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>
Przyczyna: niezgodność ładunku SOAP
Ten błąd występuje, jeśli dane wejściowe SOAP są niezgodne 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"
}
}
}
diagnostyki,
Określ nazwę zasady SOAPMessageValidation, przyczynę błędu i numer wiersza, w którym ładunek SOAP nie pasuje do definicji WSDL. Wszystkie te informacje możesz znaleźć w ciągu błędu. Na przykład w tym ciągu błędu nazwa zasady SOAPMessageValidation to
SOAP-Message-Validation-1
. Powód 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 używa ona schematu
wsdl
do weryfikowania wiadomości. Na przykład ta zasada SOAPMessageValidation zawiera plik zasobuwsdl
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>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
Sprawdź ładunek wejściowy w wierszu podanym w kroku 1, aby dowiedzieć się, co jest przyczyną błędu.
Przykładowe wejściowe dane 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 powyższym przykładzie wiersz 11 zawiera element podrzędny
<country>
w elemencie<shipTo>
.Sprawdź plik definicji WSDL
SOAP-Message-Validation-1.wsdl
, który jest używany w zasadzie SOAPMessageValidation, aby sprawdzić, 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> ...
Według definicji WSDL element
<shipTo>
nie ma elementu podrzędnego<country>
. W efekcie pojawia się ten błąd:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Rozwiązanie
Ten błąd weryfikacji możesz rozwiązać na 2 sposoby:
Rozwiązanie 1
Jeśli stwierdzisz, że używana jest definicja WSDL, możesz zmienić zasadę SOAP-Message-Validation-1.wsdl
używaną w zasadzie SOAPMessageValidation. Aby sprawdzić poprawność powyższego przykładu ładunku, możesz zmodyfikować plik w następujący 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 nr 2
Jeśli definicja WSDL jest prawidłowa, wprowadzone ładunki SOAP można zmienić zgodnie z definicją WSDL.
Możesz na przykład zmodyfikować dane wejściowe 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 dane wejściowe SOAP są niezgodne 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"
}
}
}
diagnostyki,
Określ nazwę zasady SOAPMessageValidation, przyczynę błędu i numer wiersza ładunku XML, który nie pasuje do definicji WSDL. Wszystkie te informacje znajdziesz w ciągu znaków błędu. Na przykład w tym ciągu błędu nazwa zasady SOAPMessageValidation to
SOAP-Message-Validation-1
. Powód 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 podanym w kroku 1 powyżej, aby dowiedzieć się, co było przyczyną błędu.
Przykładowe wejściowe dane 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 wiersz 15 wejściowego kodu XML zawiera element
<title>
, ale nie jest zamknięty tagiem końcowym</title>
.
Rozwiązanie
Aby naprawić ten błąd, sprawdź, czy ładunek wejściowy jest prawidłowy i poprawnie utworzony.
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>
...