Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
SourceMessageNotAvailable
Codice di errore
steps.messagevalidation.SourceMessageNotAvailable
Corpo della risposta di errore
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
"detail": {
"errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
}
}
}
Causa
Questo errore si verifica se la variabile message specificata nell'elemento <Source> del criterio SOAPMessageValidation è:
- Al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
- non può essere risolto (non è definito)
Ad esempio, questo errore si verifica se l'elemento <Source> nel criterio SOAPMessageValidation è impostato su una variabile che non esiste nel flusso in cui viene eseguito il criterio.
Diagnosi
Identifica il nome della policy SOAPMessageValidation in cui si verifica l'errore e il nome della variabile
sourcedalla stringa di errore. Ad esempio, nella seguente stringa di errore, il nome della policy SOAPMessageValidation èSOAP-Message-Validation-1e la variabilesourceèrequest:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"Nel file XML della policy SOAPMessageValidation non riuscita, verifica che il nome della variabile impostata nell'elemento
<Source>corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra).Ad esempio, la seguente norma SOAPMessageValidation specifica una variabile denominata
requestnell'elemento<Source>, che corrisponde a quanto riportato nella stringa di errore:<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>Determina se la variabile utilizzata nell'elemento
<Source>è definita e disponibile nel flusso in cui viene eseguita la policy SOAPMessageValidation.Se la variabile è:
- al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguita la policy) o
- non può essere risolto (non è definito)
allora è questa la causa dell'errore.
Ad esempio, supponiamo che la norma SOAPMessageValidation mostrata sopra venga eseguita nel flusso di risposta. Tuttavia, la variabile
requestutilizzata nell'esempio di elemento<Source>riportato sopra è disponibile solo nel flusso richiesta.Poiché la variabile
requestnon esiste nel flusso di risposta, ricevi il seguente errore:"faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Risoluzione
Assicurati che la variabile impostata nell'elemento <Source> del criterio SOAPMessageValidation non riuscito sia definita ed esista nel flusso in cui viene eseguito il criterio.
Per correggere l'esempio mostrato sopra, puoi modificare l'elemento <Source> in modo che utilizzi la variabile response, che esiste nel flusso di risposta:
<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
Codice di errore
steps.messagevalidation.NonMessageVariable
Corpo della risposta di errore
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "Variable message.content does not resolve to a Message",
"detail": {
"errorcode": "steps.messagevalidation.NonMessageVariable"
}
}
}
Causa
Questo errore si verifica se l'elemento <Source> nel criterio SOAPMessageValidation è impostato su una variabile di tipo diverso da Message.
Le variabili di tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso Apigee integrate request, response e message sono di tipo Message. Per saperne di più sulle variabili dei messaggi, consulta la Guida di riferimento alle variabili.
Diagnosi
Identifica il nome della variabile che non viene risolta in un tipo di messaggio dalla stringa di errore. Ad esempio, nella seguente stringa di errore il nome della variabile è
message.content:"faultstring": "Variable message.content does not resolve to a Message"Esamina tutte le norme SOAPMessageValidation nel proxy API specifico in cui si è verificato l'errore. Potrebbero essere presenti una o più policy SOAPMessageValidation. Identifica la o le policy SOAPMessageValidation specifiche in cui la variabile specificata nell'elemento
<Source>corrisponde al nome della variabile identificato nella stringa di errore (passaggio 1 sopra).Ad esempio, la seguente policy imposta l'elemento
<Source>su una variabile denominatamessage.content, che corrisponde a ciò che è presente nella stringa di errore:<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>Poiché la variabile
message.contentnon è di tipo Message, viene visualizzato l'errore:"faultstring": "Variable message.content does not resolve to a Message"
Risoluzione
Assicurati che l'elemento <Source> nel criterio SOAPMessageValidation non riuscito sia impostato su una variabile di tipo Message esistente nel flusso in cui viene eseguito il criterio.
Per correggere la policy, puoi modificare l'elemento <Source> per specificare una variabile di tipo Message. Ad esempio, nella policy SOAPMessageValidation non riuscita,
puoi specificare l'elemento <Source> come 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>
Non riuscito
Codice di errore
steps.messagevalidation.Failed
Corpo della risposta di errore
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Causa
Questo errore si verifica se il criterio SOAPMessageValidation non riesce a convalidare il payload del messaggio di input in base allo schema XSD o alla definizione WSDL. Si verifica anche se il messaggio di payload contiene JSON o XML non validi.
Ecco alcune delle possibili cause che possono portare a questo errore:
| Causa | Descrizione |
| Payload XML non corrispondente | Il payload XML di input non rispetta lo schema XSD specificato nel criterio SoapMessageValidation. |
| Payload SOAP non corrispondente | Il payload SOAP di input non rispetta la definizione WSDL specificata nel criterio SoapMessageValidation. |
| JSON o XML non valido | Il payload SOAP di input non contiene XML o JSON ben formattati. |
Causa: payload XML non corrispondente
Questo errore si verifica se il payload XML di input non rispetta lo schema XSD
specificato nell'elemento <ResourceURL> del criterio SoapMessageValidation.
Esempio di messaggio di errore
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnosi
Identifica il nome della policy SOAPMessageValidation, il motivo dell'errore e il numero di riga in cui il payload XML non corrisponde allo schema XSD. Tutte queste informazioni si trovano nella stringa di errore. Ad esempio, nella seguente stringa di errore, il nome della policy SOAPMessageValidation è
SOAP-Message-Validation-1,, il motivo dell'errore èExpecting a child element but found none [Line 9]e il numero di riga è9."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""Esamina il criterio SOAPMessageValidation e verifica che utilizzi un file di definizione dello schema XSD per convalidare i messaggi. Ad esempio, la seguente policy SOAPMessageValidation ha un file di risorse XSD nell'elemento
<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>Esamina il payload di input nel numero di riga identificato nel passaggio 1 sopra per capire la causa dell'errore.
Payload XML di input di esempio
<?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>Nell'esempio mostrato sopra, la riga 9 contiene il tag di chiusura
</shipTo>.Esamina il file di definizione dello schema XML,
Script-1.xsd, utilizzato nel criterio SOAPMessageValidation per vedere come dovrebbe apparire l'elemento<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> ...Secondo l'XSD di esempio utilizzato per la convalida, l'elemento
<shipTo>deve avere gli elementi secondari<name>,<street>,<address>e<country>. Tuttavia, il payload XML di input ha un solo elemento secondario,<name>. Di conseguenza, ricevi l'errore:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Risoluzione
Esistono due modi per risolvere questo errore di convalida:
Soluzione 1
Se determini che la definizione dello schema XSD impone limitazioni non necessarie e che è richiesto solo l'elemento secondario <name> nell'elemento <shipTo>, puoi modificare Script-1.xsd utilizzato nel criterio SOAPMessageValidation. Per convalidare l'esempio di payload riportato sopra, puoi modificare il file XSD nel seguente modo:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Soluzione n. 2
Se il file di definizione XSD è corretto, il payload XML di input può essere modificato in modo che corrisponda a xsd. Ad esempio, potresti modificare il payload in modo che sia conforme a xsd come segue:
<?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>
Causa: payload SOAP non corrispondente
Questo errore si verifica se il payload SOAP di input non rispetta la definizione WSDL specificata nell'elemento <ResourceURL> del criterio SoapMessageValidation.
Esempio di messaggio di errore
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnosi
Identifica il nome del criterio SOAPMessageValidation, il motivo dell'errore e il numero di riga in cui il payload SOAP non corrisponde alla definizione WSDL. Puoi trovare tutte queste informazioni nella stringa di errore. Ad esempio, nella seguente stringa di errore, il nome del criterio SOAPMessageValidation è
SOAP-Message-Validation-1, il motivo dell'errore è\"Element name mismatch. Wildcard? [Line 11]\""e il numero di riga è11:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""Esamina il criterio SOAPMessageValidation e verifica che utilizzi uno schema
wsdlper convalidare i messaggi. Ad esempio, la seguente policy SOAPMessageValidation ha un file di risorsewsdlnell'elemento<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>Esamina il payload di input nel numero di riga identificato nel passaggio 1 per capire la causa dell'errore.
Payload SOAP di input di esempio
<?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>Nell'esempio mostrato sopra, la riga 11 contiene l'elemento secondario
<country>sotto l'elemento<shipTo>.Esamina il file di definizione WSDL,
SOAP-Message-Validation-1.wsdl, utilizzato nella policy SOAPMessageValidation per verificare cosa potrebbe non funzionare nell'elemento secondario<country>nell'elemento<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> ...Secondo la definizione WSDL utilizzata per la convalida, l'elemento
<shipTo>non ha un elemento secondario<country>. Di conseguenza, ricevi l'errore:"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Risoluzione
Esistono due modi per risolvere questo errore di convalida:
Soluzione 1
Se determini che la definizione WSDL utilizzata non è corretta, puoi modificare SOAP-Message-Validation-1.wsdl utilizzato nel criterio SOAPMessageValidation. Per convalidare l'esempio di payload riportato sopra, puoi modificare il file nel seguente modo:
...
<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>
Soluzione n. 2
Se la definizione WSDL è corretta, il payload SOAP di input può essere modificato in modo che corrisponda alla definizione WSDL.
Ad esempio, puoi modificare il payload SOAP di input come segue:
<?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>
Causa: JSON o XML non valido
Questo errore si verifica se il payload SOAP di input non rispetta la definizione WSDL specificata nell'elemento <ResourceURL> del criterio SoapMessageValidation.
Esempio di messaggio di errore
{
"fault": {
"faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly around char 420)\"",
"detail": {
"errorcode": "steps.messagevalidation.Failed"
}
}
}
Diagnosi
Identifica il nome del criterio SOAPMessageValidation, il motivo dell'errore e il numero di riga del payload XML che non corrisponde alla definizione WSDL. Puoi trovare tutte queste informazioni nella stringa di errore. Ad esempio, nella seguente stringa di errore, il nome del criterio SOAPMessageValidation è
SOAP-Message-Validation-1, il motivo dell'errore èExpected </title> at line 15(possibly around char 420):e il numero di riga è15."faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""Esamina il payload di input nel numero di riga identificato nel passaggio 1 sopra per capire la causa dell'errore.
Payload SOAP di input di esempio
<?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>Nell'esempio mostrato sopra, la riga 15 dell'XML di input contiene l'elemento
<title>, ma non è chiuso con un tag di chiusura</title>.
Risoluzione
Per risolvere l'errore, assicurati che il payload di input sia valido e formato correttamente.
Ad esempio, potresti modificare il payload XML di input come segue:
...
</shipTo>
<items>
<item>
<title>I love APIs</title>
<quantity>1</quantity>
<price>2.90</price>
</item>
</items>
...