Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
    Apigee Edge-Dokumentation aufrufen.
  
SourceMessageNotAvailable
Fehlercode
steps.messagevalidation.SourceMessageNotAvailable
Fehlerantworttext
{ "fault": { "faultstring": "source_var_name message is not available for[policy_name]", "detail": { "Errorcode": "steps.messagevalidation.SourceMessageNotAvailable" } } }
Beispieltext für eine Fehlermeldung
{
  "fault": {
    "faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
    "detail": {
      "errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
    }
  }
}
Ursache
Dieser Fehler tritt auf, wenn die im Element <Source> der SOAPMessageValidation-Richtlinie angegebene Variable message entweder:
- außerhalb des Geltungsbereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird) oder
- Kann nicht aufgelöst werden (nicht definiert)
Dieser Fehler tritt beispielsweise auf, wenn für das Element <Source> in der SOAPMessageValidation-Richtlinie eine Variable festgelegt ist, die in dem Ablauf, in dem die Richtlinie ausgeführt wird, nicht vorhanden ist.
Diagnose
- Ermitteln Sie den Richtliniennamen der SOAPMessageValidation, in dem der Fehler auftritt, und den Namen der Variablen - sourceaus dem Fehlerstring. Im folgenden Fehlerstring ist beispielsweise der SOAPMessageValidation-Richtlinienname- SOAP-Message-Validation-1und die Variable- sourceist- request:- "faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
- Überprüfen Sie in der XML-Datei der fehlgeschlagenen SOAPMessageValidation-Richtlinie, ob der Name der im Element - <Source>festgelegten Variable mit dem Variablennamen übereinstimmt, der im Fehlerstring angegeben ist (Schritt 1 oben).- Beispiel: Die folgende SOAPMessageValidation-Richtlinie gibt eine Variable mit dem Namen - requestim Element- <Source>an, die mit dem Namen im Fehlerstring übereinstimmt:- <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>
- Prüfen Sie, ob die im Element - <Source>verwendete Variable definiert ist, und ob sie in dem Ablauf verfügbar ist, in dem die SOAPMessageValidation-Richtlinie ausgeführt wird.- Wenn die Variable entweder: - außerhalb des Gültigkeitsbereichs liegt (nicht in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie ausgeführt wird) oder
- Kann nicht aufgelöst werden (nicht definiert)
 - Dann ist dies die Ursache des Fehlers. - Nehmen wir beispielsweise an, dass die oben aufgeführte SOAPMessageValidation-Richtlinie im Antwortablauf ausgeführt wird. Die Variable - requestverwendet im Element- <Source>-Beispiel oben ist nur im Anfrageablauf verfügbar.- Da die Variable - requestnicht im Antwortablauf vorhanden ist, erhalten Sie die folgende Fehlermeldung:- "faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
Lösung
Achten Sie darauf, dass die im Element <Source> der fehlgeschlagenen SOAPMessageValidation-Richtlinie festgelegte Variable definiert ist und in dem Ablauf vorhanden ist, in dem die Richtlinie ausgeführt wird.
Um das obige Beispiel zu korrigieren, können Sie das Element <Source so ändern, dass die im Antwortablauf vorhandene Variable response verwendet wird:
<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
Fehlercode
steps.messagevalidation.NonMessageVariable
Fehlerantworttext
{ "fault": { "faultstring": "Variable var_name does not resolve to a Message" "detail": { "errorcode": "steps.messagevalidation.NonMessageVariable" } } }
Beispieltext für eine Fehlermeldung
{
  "fault": {
    "faultstring": "Variable message.content does not resolve to a Message",
    "detail": {
      "errorcode": "steps.messagevalidation.NonMessageVariable"
    }
  }
}
Ursache
Dieser Fehler tritt auf, wenn für das Element <Source> in der SOAPMessageValidation-Richtlinie eine Variable festgelegt ist, die nicht vom Typ Message ist.
Nachrichtentypvariablen stellen ganze HTTP-Anfragen und -Antworten dar. Die integrierten Apigee-Ablaufvariablen request, response und message sind vom Typ "Message". Weitere Informationen zu Nachrichtenvariablen finden Sie in der Variablenreferenz.
Diagnose
- Ermitteln Sie den Namen der Variable, die nicht in einen Nachrichtentyp aus der Fehlerzeichenfolge aufgelöst wird. Im folgenden Fehlerstring lautet der Name der Variablen beispielsweise - message.content:- "faultstring": "Variable message.content does not resolve to a Message"
- Untersuchen Sie alle SOAPMessageValidation-Richtlinien im entsprechenden API-Proxy, in dem der Fehler aufgetreten ist. Es könnten eine oder mehrere SOAPMessageValidation-Richtlinien vorhanden sein. Ermitteln Sie die spezifischen SOAPMessageValidation-Richtlinien, in denen die im Element - <Source>angegebene Variable mit dem im Fehlerstring angegebenen Variablennamen übereinstimmt (Schritt 1 oben).- Die folgende Richtlinie legt beispielsweise das - <Source>-Element auf eine Variable namens- message.contentfest, die mit dem übereinstimmt, was im Fehlerstring enthalten ist:- <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>- Da die Variable - message.contentnicht vom Typ Message ist, erhalten Sie folgende Fehlermeldung:- "faultstring": "Variable message.content does not resolve to a Message"
Lösung
Achten Sie darauf, dass für das Element <Source> in der fehlgeschlagenen SOAPMessageValidation-Richtlinie eine Message-Typvariable festgelegt wurde, die in dem Ablauf vorhanden ist, in dem die Richtlinie ausgeführt wird.
Um die Richtlinie zu korrigieren, können Sie das Element <Source> so ändern, dass eine Variable vom Typ "Message" angegeben wird. In der fehlgeschlagenen Richtlinie für die MessageMessageValidation können Sie beispielsweise das Element <Source> als request angeben:
<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>
Fehler
Fehlercode
steps.messagevalidation.Failed
Fehlerantworttext
{ "fault": { "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num "detail": { "errorcode": "steps.messagevalidation.Failed" } } }
Beispieltext für eine Fehlermeldung
{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}
Ursache
Dieser Fehler tritt auf, wenn die SOAPMessageValidation-Richtlinie die Eingabe-Nachrichten-Nutzlast nicht gegen das XSD-Schema oder die WSDL-Definition validiert. Sie wird auch angezeigt, wenn die Nutzlastnachricht fehlerhaft formatierte JSON- oder XML-Daten enthält.
Mögliche Ursachen für diesen Fehler:
| Ursache | Beschreibung | 
| Nicht übereinstimmende XML-Nutzlast | Die XML-Eingabenutzlast entspricht nicht dem in der SoapMessageValidation-Richtlinie angegebenen XSD-Schema. | 
| SOAP-Nutzlast stimmt nicht überein | Die SOAP-Nutzlast der Eingabe entspricht nicht der WSDL-Definition, die in der SoapMessageValidation-Richtlinie angegeben ist. | 
| JSON oder XML-Datei ist fehlerhaft | Die Eingabe-Soap-Nutzlast enthält kein korrekt formatiertes XML oder JSON. | 
Ursache: Nicht übereinstimmende XML-Nutzlast
Dieser Fehler tritt auf, wenn die XML-Eingabenutzlast nicht dem XSD-Schema entspricht, das im Element <ResourceURL> der SoapMessageValidation-Richtlinie angegeben ist.
Beispiel für Fehlermeldung
{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}
Diagnose
- Ermitteln Sie den Namen der SOAPMessageValidation-Richtlinie, den Grund für den Fehler und die Zeilennummer, an der die XML-Nutzlast nicht mit dem XSD-Schema übereinstimmt. Alle diese Informationen befinden sich im Fehlerstring. Im folgenden Fehlerstring lautet beispielsweise der SOAPMessageValidation-Richtlinienname - SOAP-Message-Validation-1,, der Grund für den Fehler- Expecting a child element but found none [Line 9]und die Zeilennummer- 9.- "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
- Prüfen Sie die SOAPMessageValidation-Richtlinie und bestätigen Sie, dass sie eine XSD-Schemadefinitionsdatei zur Validierung von Nachrichten verwendet. Die folgende SOAPMessageValidation-Richtlinie hat beispielsweise eine XSD-Ressourcendatei im Element - <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>
- Überprüfen Sie die Eingabenutzlast der in Schritt 1 identifizierten Zeilennummer, um die Fehlerursache zu ermitteln. - Beispiel für XML-Nutzlast der Eingabe - <?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>- In dem obigen Beispiel hat Zeile 9 das End-Tag - </shipTo>.
- Sehen Sie sich die XML-Schemadefinitionsdatei - Script-1.xsdan, die in der SOAPMessageValidation-Richtlinie verwendet wird. Sie sehen dann, wie das Element- <shipTo>aussehen sollte:- ... <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> ...- Gemäß dem für die Validierung verwendeten XSD-Element muss das Element - <shipTo>die untergeordneten Elemente- <name>,- <street>,- <address>und- <country>haben. Die XML-Nutzlast der Eingabe hat jedoch nur das untergeordnete Element- <name>. Als Folge erhalten Sie folgende Fehlermeldung:- "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
Lösung
Es gibt zwei Möglichkeiten, den Validationsfehler zu lösen:
Lösung 1
Wenn Sie feststellen, dass die XSD-Schemadefinition unnötige Einschränkungen aufsetzt und nur das untergeordnete Element <name> unter dem Element <shipTo> erforderlich ist, können Sie das in der Richtlinie SOAPMessageValidation verwendete Script-1.xsd ändern. Um das obige Nutzlast-Beispiel zu validieren, können Sie die XSD-Datei so ändern:
...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Lösung 2
Wenn die XSD-Definitionsdatei korrekt ist, kann die XML-Eingabenutzlast so geändert werden, dass sie mit xsd übereinstimmt. Sie können beispielsweise die Nutzlast so ändern, dass sie xsd entspricht:
<?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>
Ursache: Nicht übereinstimmende SOAP-Nutzlast
Dieser Fehler tritt auf, wenn die SOAP-Eingabenutzlast nicht der WSDL-Definition entspricht, die im <ResourceURL>-Element der SoapMessageValidation-Richtlinie angegeben wurde.
Beispiel für Fehlermeldung
{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}
Diagnose
- Ermitteln Sie den Namen der SOAPMessageValidation-Richtlinie, den Grund für den Fehler und die Zeilennummer, an der die SOAP-Nutzlast nicht mit der WSDL-Definition übereinstimmt. Sie finden alle diese Informationen im Fehlerstring. Im folgenden Fehlerstring lautet der Name der SOAPMessageValidation-Richtlinie beispielsweise - SOAP-Message-Validation-1, der Grund für den Fehler- \"Element name mismatch. Wildcard? [Line 11]\""und die Zeilennummer- 11:- "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
- Lesen Sie die Richtlinie "MessageMessageValidation" und prüfen Sie, ob die Nachrichten mit einem - wsdl-Schema validiert werden. Die folgende SOAPMessageValidation-Richtlinie hat beispielsweise eine- wsdl-Ressourcendatei im Element- <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>
- Untersuchen Sie die Eingabenutzlast an der in Schritt 1 angegebenen Zeilennummer, um die Fehlerursache zu ermitteln. - Beispiel-RPC-Nutzlast - <?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>- Im Beispiel oben hat Zeile 11 das untergeordnete Element - <country>unter dem Element- <shipTo>.
- Untersuchen Sie die WSDL-Definitionsdatei - SOAP-Message-Validation-1.wsdl, die in der SOAPMessageValidation-Richtlinie verwendet wird, um zu sehen, was mit dem untergeordneten Element- <country>unter dem Element- <shipTo>fehlschlagen könnte:- <?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> ...- Gemäß der WSDL-Definition, die für die Validierung verwendet wird, enthält das Element - <shipTo>kein untergeordnetes- <country>-Element. Als Folge erhalten Sie folgende Fehlermeldung:- "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
Lösung
Es gibt zwei Möglichkeiten, den Validationsfehler zu lösen:
Lösung 1
Wenn Sie feststellen, dass die verwendete WSDL-Definition falsch ist, können Sie den in der RPCMessageValidation-Richtlinie verwendete SOAP-Message-Validation-1.wsdl ändern. Um das obige Nutzlast-Beispiel zu validieren, können Sie die Datei so ändern:
...
<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>
Lösung 2
Wenn die WSDL-Definition korrekt ist, kann die SOAP-Eingabenutzlast geändert werden, damit sie der WSDL-Definition entspricht.
Beispielsweise können Sie die SOAP-Eingabenutzlast so ändern:
<?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>
Ursache: Fehlerhafte JSON- oder XML-Datei
Dieser Fehler tritt auf, wenn die SOAP-Eingabenutzlast nicht der WSDL-Definition entspricht, die im <ResourceURL>-Element der SoapMessageValidation-Richtlinie angegeben wurde.
Beispiel für Fehlermeldung
{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly  around char 420)\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}
Diagnose
- Identifizieren Sie den SOAPMessageValidation-Richtliniennamen, den Grund für den Fehler und die Zeilennummer der XML-Nutzlast, die nicht mit der WSDL-Definition übereinstimmt. Sie finden alle diese Informationen im Fehlerstring. Im folgenden Fehlerstring lautet der Name der SOAPMessageValidation-Richtlinie beispielsweise - SOAP-Message-Validation-1, der Grund für den Fehler- Expected </title> at line 15(possibly around char 420):und die Zeilennummer- 15.:- "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly around char 420)\""
- Überprüfen Sie die Eingabenutzlast der in Schritt 1 identifizierten Zeilennummer, um die Fehlerursache zu ermitteln. - Beispiel-RPC-Nutzlast - <?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>- Im obigen Beispiel enthält Zeile 15 der Eingabe-XML das Element - <title>, ist jedoch nicht mit einem- </title>-Endtag abgeschlossen.
Lösung
Stellen Sie sicher, dass die Eingabenutzlast gültig und korrekt gebildet ist, um den Fehler zu beheben.
Beispielsweise können Sie die XML-Eingabeneingabe so ändern:
...
</shipTo>
<items>
  <item>
    <title>I love APIs</title>
    <quantity>1</quantity>
    <price>2.90</price>
  </item>
</items>
...