Fehlerbehebung bei JSON-zu-XML-Richtlinienlaufzeitfehler

Sie lesen die Dokumentation zu Apigee X.
Apigee Edge-Dokumentation aufrufen

SourceUnavailable

Fehlercode

steps.json2xml.SourceUnavailable

Fehlerantworttext

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn für die im Element <Source> der JSON-zu-XML-Richtlinie angegebene Variable message eine der folgenden Aussagen gilt:

  • liegt außerhalb des Geltungsbereichs (nicht im spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird) oder
  • kann nicht gelöst werden (ist nicht definiert)

Dieser Fehler tritt beispielsweise auf, wenn die JSON-zu-XML-Richtlinie im Anfrageablauf ausgeführt werden soll, das <Source>-Element jedoch auf die Variable response eingestellt ist, die im Anfrageablauf nicht vorhanden ist.

Diagnose

  1. Ermitteln Sie die JSON-zu-XML-Richtlinie, in der der Fehler aufgetreten ist, sowie den Namen der nicht verfügbaren Variable. Sie finden beide Elemente im Element faultstring der Fehlerantwort. Beispiel: Im folgenden faultstring lautet der Richtlinienname Convert-JSONToXML und die Variable response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Prüfen Sie in der XML-Datei der fehlgeschlagenen JSON-zu-XML-Richtlinie, ob der Name der Variablen im <Source>-Element mit dem im Fehlerstring angegebenen Variablennamen übereinstimmt (Schritt 1 oben). Die folgende JSON-zu-XML-Richtlinie gibt beispielsweise eine Variable namens response im Element <Source> an, die mit dem Inhalt von faultstring übereinstimmt:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. Prüfen Sie, ob die im Element <Source> verwendete Variable definiert ist und in dem Ablauf verfügbar ist, in dem die JSON-zu-XML-Richtlinie ausgeführt wird.

  4. Wenn die Variable entweder:

    • außerhalb des Geltungsbereichs (nicht im spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird) liegt oder
    • nicht gelöst werden kann (ist nicht definiert),

    dann ist das die Ursache für den Fehler.

    Beispiel: Die oben gezeigte JSON-zu-XML-Richtlinie muss im Anfrage-Ablauf ausgeführt werden. Wie bereits erwähnt, wird die Variable response im Element <Source> der JSON-zu-XML-Richtlinie verwendet. Die Antwortvariable ist nur im Antwortablauf verfügbar.

    Da die Variable response im Anfrageablauf nicht vorhanden ist, erhalten Sie den Fehlercode:

    steps.json2xml.SourceUnavailable
    

Lösung

Achten Sie darauf, dass die Variable im Element <Source> der fehlgeschlagenen JSON-in-XML-Richtlinie definiert ist und in dem Ablauf vorhanden ist, in dem die Richtlinie ausgeführt wird.

Um die oben gezeigte Beispielrichtlinie von JSON zu XML zu korrigieren, können Sie das Element <Source> ändern, um die Variable request zu verwenden, da sie im Anfrageablauf vorhanden ist:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

ExecutionFailed

Fehlercode

steps.json2xml.ExecutionFailed

Fehlerantworttext

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

Mögliche Ursachen

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung
Fehlende Eingabe-Nutzlast Die Nutzlast der JSON-Eingabe ist leer.
Ungültige oder fehlerhafte Eingabe Die an die JSON-zu-XML-Richtlinie übergebene Eingabe (JSON) ist ungültig oder fehlerhaft.

Ursache: Fehlende Eingabe-Nutzlast

In der JSON-zu-XML-Richtlinie, wenn der Inhalt (Nutzlast) der im Element <Source> angegebenen Variable leer ist, tritt dieser Fehler auf.

Beispiel: Wenn das Element <Source> in der JSON-zu-XML-Richtlinie als request- oder response-Variable festgelegt ist und eine JSON-Nutzlast enthalten soll, die Nutzlast aber leer ist, tritt der Fehler auf.

Diagnose

  1. Ermitteln Sie die JSON-zu-XML-Richtlinie, in der der Fehler aufgetreten ist. Sie finden diese Informationen im Element faultstring der Fehlerantwort. Im folgenden faultstring lautet der Richtlinienname beispielsweise Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Untersuchen Sie das <Source>-Element in der fehlgeschlagenen JSON-zu-XML-Richtlinie und bestimmen Sie die angegebene Variable. Die folgende JSON-zu-XML-Richtlinie hat beispielsweise das <Source>-Element auf request gesetzt:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. Prüfen Sie, ob die für das Element <Source> in der Richtlinie angegebene Variable leer ist. Wenn sie leer ist, ist dies die Ursache des Fehlers.

    In der oben gezeigten Beispielrichtlinie von JSON zu XML ist die vom Client gesendete Anfragenutzlast leer, d. h. der Anfragetext.

    Beispiel:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type: application/json"
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen angeben.

    Da die Nutzlast der JSON-Antwort leer ist, erhalten Sie den Fehlercode:

    steps.json2xml.ExecutionFailed
    

    Dieser Fehler kann auch auftreten, wenn das <Source>-Element auf "response" gesetzt ist, aber eine leere Nutzlast vom Back-End-Server übergeben wird.

Lösung

Achten Sie darauf, dass die Eingabe, die im Element <Source> an die JSON-zu-XML-Richtlinie übergeben wird, eine gültige JSON-Nutzlast ist.

Übergeben Sie eine gültige JSON-Nutzlast, um das Problem mit der Beispiel-JSON-zu-XML-Richtlinie zu beheben. Beispiel:

  1. Erstellen Sie eine Datei mit dem Namen city.json und folgendem Inhalt:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Führen Sie den API-Aufruf mit einem curl-Befehl so aus:

    curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.

Ursache: Ungültige oder fehlerhafte Eingabe

Wenn die JSON-zu-XML-Richtlinie die Eingabe ungültig oder fehlerhaft formatiert, wird dieser Fehler ausgegeben.

Die folgende ungültige JSON-Datei wird beispielsweise als Eingabe für die JSON-zu-XML-Richtlinie bereitgestellt.

[
    "args": ["name" : "Google" ]
]

dann erhalten Sie diese Fehlermeldung:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

Diagnose

  1. Ermitteln Sie die JSON-zu-XML-Richtlinie, in der der Fehler aufgetreten ist. Sie finden diese Informationen im Element faultstring der Fehlerantwort. Im folgenden faultstring lautet der Richtlinienname beispielsweise Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Prüfen Sie das <Source>-Element, das in der fehlgeschlagenen JSON-Datei im XML-Format angegeben ist. Die folgende JSON-zu-XML-Richtlinie hat beispielsweise das Element <Source> auf die Variable request festgelegt:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. Prüft, ob die im Element <Source> angegebene Eingabe eine gültige JSON-Nutzlast ist. Wenn die Eingabe ungültig oder fehlerhaft ist, ist dies die Ursache des Fehlers.

    Es wird davon ausgegangen, dass die folgende ungültige JSON-Datei an die Richtlinie übergeben wurde

    [
        "args": ["name" : "Google" ]
    ]
    

    Hier ist der Beispiel-API-Aufruf, der zeigt, wie die Anfrage übergeben wurde:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen angeben.

    Die in der Anfrage übergebene JSON-Nutzlast ist ungültig, da das JSON-Objekt mit eckigen Klammern ([ ]) beginnt und endet. Aus diesem Grund erhalten Sie den Fehlercode:

    steps.json2xml.ExecutionFailed

    Dieser Fehler kann auch auftreten, wenn das <Source>-Element auf "Antwort" gesetzt wurde, die Nutzlast der JSON-Antwort aber ungültig oder fehlerhaft ist.

Lösung

Achten Sie darauf, dass die Eingabe im Element <Source> an die JSON-zu-XML-Richtlinie gültig und nicht fehlerhaft ist.

Um das Problem mit der oben erwähnten Beispiel-JSON-zu-XML-Richtlinie zu beheben, übergeben Sie eine gültige JSON-Nutzlastanfrage so:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Fehlercode

steps.json2xml.OutputVariableIsNotAvailable

Fehlerantworttext

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die im <Source>-Element der JSON-zu-XML-Richtlinie angegebene Variable den Typ "String" hat und das Element <OutputVariable> nicht definiert ist. Das Element <OutputVariable> ist obligatorisch, wenn die im Element <Source> definierte Variable vom Typ "String" ist.

Diagnose

  1. Ermitteln Sie die JSON-zu-XML-Richtlinie, in der der Fehler aufgetreten ist. Dies finden Sie im Element faultstring der Fehlerantwort. Im folgenden faultstring lautet der Richtlinienname beispielsweise Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. In der fehlgeschlagenen JSON-zu-XML-Richtlinie prüft die Richtlinie, ob <OutputVariable> fehlt.

    In der folgenden JSON-zu-XML-Beispielrichtlinie fehlt ein <OutputVariable>-Element:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. Ermitteln Sie den im <Source>-Element angegebenen Variablentyp:

    1. Suchen Sie den Code im API-Proxy, in dem die Variable zuerst definiert wurde.
    2. Nachdem Sie die Richtlinie ermittelt haben, in der die Variable zuerst definiert und ausgefüllt wird, müssen Sie den Typ dieser Variable so bestimmen:
      1. Prüfen Sie den Wert des Typattributs (falls vorhanden).
      2. Wenn das Typattribut nicht vorhanden ist, wird die Variable als String betrachtet.
    3. Wenn der Typ der Variablen "String" ist, ist dies die Ursache des Fehlers. Weitere Informationen zu gängigen Variablen und ihren Typen finden Sie in der Variablenreferenz.

    Betrachten Sie beispielsweise die Variable PostalCode in der obigen JSON-zu-XML-Richtlinie.

    Beispiel: Die Richtlinie "Nachricht zuweisen" wird verwendet, um einer Variablen mit einem Namen namens PostalCode einen Wert zuzuweisen:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Der in <AssignVariable> festgelegte Variablentyp ist String. Die Variable PostalCode ist also vom Typ String.

    Denken Sie daran, dass die Variable PostalCode im Element <Source> der JSON-zu-XML-Richtlinie verwendet wird:

    <Source>PostalCode</Source>
    

    Da PostalCode ein String-Typ ist und das <OutputVariable>-Element fehlt, erhalten Sie den Fehlercode:

    steps.json2xml.OutputVariableIsNotAvailable
    

Lösung

Prüfen Sie, ob die im Element <Source> der JSON-zu-XML-Richtlinie angegebene Variable vom Typ "String" ist, dann ist das Element <OutputVariable> in der Richtlinie definiert.

Um die oben genannte JSON-zu-XML-Richtlinie zu korrigieren, fügen Sie wie unten dargestellt ein <OutputVariable>-Element ein.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

InCompatibleTypes

Fehlercode

steps.json2xml.InCompatibleTypes

Fehlerantworttext

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn der Typ der im Element <Source> definierten Variable und das Element <OutputVariable> nicht identisch sind. Der Typ der im Element <Source> enthaltenen Variablen muss mit dem Typ der im Element <OutputVariable> enthaltenden Variable übereinstimmen.

Gültige Typen sind message und string.

Diagnose

  1. Ermitteln Sie die JSON-zu-XML-Richtlinie, in der der Fehler aufgetreten ist. Dies finden Sie im Element faultstring der Fehlerantwort. Im folgenden faultstring lautet der Richtlinienname beispielsweise JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Notieren Sie sich in der fehlgeschlagenen JSON-zu-XML-Richtlinie die in <OutputVariable> und <Source> angegebenen Werte.

    Sehen Sie sich die folgende Beispielrichtlinie an:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. Legen Sie den Variablentyp fest, der in den Elementen <Source> und <OutputVariable> angegeben ist:

    1. Suchen Sie den Code im API-Proxy, in dem jede dieser Variablen zuerst definiert wurde.
    2. Nachdem Sie die Richtlinie ermittelt haben, in der die Variable zuerst definiert und ausgefüllt wird, müssen Sie den Typ dieser Variable so bestimmen:
      1. Prüfen Sie den Wert des Typattributs (falls vorhanden).
      2. Wenn das Typattribut nicht vorhanden ist, wird die Variable als String betrachtet.
    3. Wenn der Typ der in <Source> angegebenen Variablen ein String ist, während der Typ <OutputVariable> "message" (und umgekehrt) ist, ist das die Ursache des Fehlers. Weitere Informationen zu gängigen Variablen und ihren Typen finden Sie in der Variablenreferenz.

    Als Beispiel können Sie die Richtlinie "Nachricht zuweisen" verwenden, um einer Variable namens PostalCode einen Wert zuzuweisen:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Der in <AssignVariable> festgelegte Variablentyp ist String. Daher ist die Variable PostalCode ein Typstring.

    Denken Sie daran, dass die Variable PostalCode im Element <Source> der JSON-zu-XML-Richtlinie verwendet wird:

    <Source>PostalCode</Source>
    

    Denken Sie auch daran, dass die Variable response im Element <OutputVariable> der JSON-zu-XML-Richtlinie verwendet wird:

    <OutputVariable>response</OutputVariable>
    

    Da PostalCode einen String-Typ hat, während die Variable response vom Nachrichtentyp ist, sind sie nicht kompatibel. Sie erhalten daher den Fehlercode:

    steps.json2xml.InCompatibleTypes
    

    Der obige Fehler kann auch auftreten, wenn die Variable im <Source>-Element vom Typ message ist, die Variable im <OutputVariable>-Element jedoch vom Typ String ist.

Lösung

Achten Sie darauf, dass die Art der Variablen, die im Element <Source> und im Element <OutputVariable> definiert sind, immer gleich ist. Der Typ der im Element <Source> enthaltenen Variablen muss mit dem Typ der im Element <OutputVariable> enthaltenden Variable übereinstimmen. Das bedeutet, dass der Typ von <Source> und den <OutputVariable>-Elementen sowohl String- als auch Nachrichtentyp sind.

Um die oben erläuterte JSON-zu-XML-Richtlinie zu korrigieren, können Sie mithilfe der Richtlinie zum Zuweisen von Nachrichten eine weitere Variable PostalCode_output des Typs "String" deklarieren und diese Variable im Element <OutputVariable> der JSON- oder XML-Richtlinie verwenden.

Geänderte Richtlinie "Nachricht zuweisen":

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Geänderte JSON-zu-XML-Richtlinie:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

InvalidSourceType

Fehlercode

steps.json2xml.InvalidSourceType

Fehlerantworttext

{
    "fault": {
        "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn der Variablentyp, der zum Definieren des <Source>-Elements verwendet wird, ungültig ist. Die gültigen Variablentypen sind message und string.

Diagnose

  1. Ermitteln Sie den ungültigen Quelltyp, der in der JSON-zu-XML-Richtlinie verwendet wird. Diese Informationen finden Sie in der Fehlermeldung. Im folgenden Fehler ist der ungültige Typ beispielsweise "Integer" (Ganzzahl).

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Prüfen Sie alle JSON-zu-XML-Richtlinien in dem spezifischen API-Proxy, in dem der Fehler aufgetreten ist. Notieren Sie sich in der fehlgeschlagenen JSON-zu-XML-Richtlinie den Namen der in <Source> angegebenen Variablen.

    Hier sehen Sie eine Beispielrichtlinie, in der die Variable EmployeeID im Element <Source> angegeben ist:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. Ermitteln Sie den im <Source>-Element angegebenen Variablentyp:

    1. Suchen Sie den Code im API-Proxy, in dem diese Variable zuerst definiert wurde.
    2. Nachdem Sie die Richtlinie ermittelt haben, in der die Variable zuerst definiert und ausgefüllt wird, müssen Sie den Typ dieser Variable so bestimmen:
      1. Prüfen Sie den Wert des Typattributs (falls vorhanden).
      2. Wenn das Typattribut nicht vorhanden ist, wird die Variable als String betrachtet.
    3. Wenn der Typ der in <Source> angegebenen Variable weder der Typ "Nachricht" noch "String" ist, ist dies die Ursache des Fehlers. Weitere Informationen zu gängigen Variablen und ihren Typen finden Sie in der Variablenreferenz.

    Als Beispiel nehmen wir an, dass die Richtlinie "ExtractVariables" verwendet wird, um den Wert aus einer JSON-Nutzlast zu extrahieren, und setzt den Wert wie unten dargestellt auf die Variable EmployeeID des Ganzzahltyps:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

    Denken Sie daran, dass die Variable EmployeeID im Element <Source> der JSON-zu-XML-Richtlinie verwendet wird:

    <Source>EmployeeID</Source>
    

    Da der Typ dieser Variable Integer ist, aber kein gültiger <Source>-Typ ist, schlägt der API-Proxy mit folgendem Fehler fehl:

    steps.json2xml.InvalidSourceType
    

Lösung

Prüfen Sie, ob der Typ der Variablen, die zur Angabe des Elements <Source> verwendet wird, gültig ist. Gültige <Source>-Typen sind message und string.

Zur Vermeidung des obigen Fehlers in Bezug auf die JSON-zu-XML-Richtlinie können Sie die Anfragevariable vom Typ "Nachricht" oder einen anderen String verwenden, der eine gültige JSON-Nutzlast ist.