Rozwiązywanie problemów związanych z błędami zasad w środowisku wykonawczym zasad JSON na XML

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

SourceUnavailable

Kod błędu

steps.json2xml.SourceUnavailable

Treść odpowiedzi na błąd

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

Przykładowy błąd

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

Przyczyna

Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> zasady JSON na XML to:

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
  • Nie można go rozwiązać (nie jest zdefiniowany)

Ten błąd występuje na przykład wtedy, gdy zasada JSON na XML powinna być wykonywana w przepływie żądania, ale element <Source> jest ustawiony na zmienną response, której nie ma w przepływie żądania.

Diagnostyka

  1. Wskaż zasadę JSON na XML, w której wystąpił błąd, i nazwę zmiennej, która jest niedostępna. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym faultstring nazwa zasad to Convert-JSONToXML, a zmienna to response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. W nieprawidłowym pliku XML zasady JSON na XML sprawdź, czy nazwa zmiennej ustawiona w elemencie <Source> jest zgodna z nazwą zmiennej podaną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada JSON na XML określa zmienną o nazwie response w elemencie <Source>, która pasuje do zawartości faultstring:

    <?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. Określ, czy zmienna używana w elemencie <Source> jest zdefiniowana i dostępna w procesie, w którym wykonywana jest zasada JSON na XML.

  4. Jeśli zmienna to:

    • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
    • Nie można go rozwiązać (nie jest zdefiniowany)

    to właśnie jest przyczyną błędu.

    Załóżmy na przykład, że zasada konwersji JSON na XML, która jest widoczna powyżej, ma być wykonywana w obiegu żądania. Zwróć uwagę, że zmienna response jest używana w elemencie <Source> zasady JSON na XML. Zmienna odpowiedzi jest dostępna tylko w przepływie odpowiedzi.

    Zmienna response nie występuje w przepływie żądania, dlatego pojawia się kod błędu:

    steps.json2xml.SourceUnavailable
    

Rozdzielczość

Upewnij się, że zmienna ustawiona w elemencie <Source> nieudanej zasady JSON na XML jest zdefiniowana i istnieje w przepływie wykonywania tej zasady.

Aby poprawić widoczną powyżej przykładową zasadę z JSON na XML, możesz zmodyfikować element <Source>, tak aby korzystał ze zmiennej request, ponieważ występuje ona w przepływie żądania:

  <?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

Kod błędu

steps.json2xml.ExecutionFailed

Treść odpowiedzi na błąd

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

Możliwe przyczyny

Możliwe przyczyny tego błędu:

Przyczyna Opis
Brak ładunku wejściowego Ładunek wejściowy (JSON) jest pusty.
Nieprawidłowe lub źle sformatowane dane wejściowe Dane wejściowe (JSON) przekazywane do zasady JSON na XML są nieprawidłowe lub uszkodzone.

Przyczyna: brak danych wejściowych

Ten błąd występuje w zasadzie JSON na XML, jeśli zawartość (ładunek) zmiennej określonej w elemencie <Source> jest pusta.

Jeśli na przykład element <Source> w zasadzie JSON na XML jest ustawiony jako zmienna request lub response i powinny zawierać ładunek JSON, ale jeśli ładunek jest pusty, występuje błąd.

Diagnostyka

  1. Znajdź zasadę konwersji pliku JSON na XML, w której wystąpił błąd. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym elemencie faultstring nazwa zasady to Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Sprawdź element <Source> w nieudanym pliku XML zasady JSON na XML i określ podaną zmienną. Na przykład w tej zasadzie JSON na XML element <Source> jest ustawiony na request:

    <?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. Sprawdź, czy zmienna podana w elemencie <Source> w zasadzie jest pusta. Jeśli jest pusty, to właśnie jest przyczyną błędu.

    W przykładowej zasadzie JSON na XML widocznej powyżej ładunek żądania (czyli treść żądania), który został wysłany przez klienta, jest pusty.

    Na przykład:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
    

    Ponieważ ładunek odpowiedzi JSON jest pusty, otrzymujesz kod błędu:

    steps.json2xml.ExecutionFailed
    

    Ten błąd może też wystąpić, jeśli element <Source> ma wartość response, ale serwer zaplecza przekazuje pusty ładunek danych.

Rozdzielczość

Sprawdź, czy dane wejściowe przekazywane do zasady JSON na XML w elemencie <Source> są prawidłowym ładunkiem JSON i nie są puste.

Aby rozwiązać problem z przekształcaniem pliku JSON w plik XML, podaj prawidłowy ładunek JSON. Na przykład:

  1. Utwórz plik o nazwie city.json z tą zawartością:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Wywołanie interfejsu API przy użyciu polecenia cURL w następujący sposób:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

Przyczyna: nieprawidłowe lub błędnie sformatowane dane wejściowe

Ten błąd występuje, jeśli zasada JSON na XML analizuje dane wejściowe, które są nieprawidłowe lub uszkodzone.

Jeśli na przykład w zasadach JSON na XML podany zostanie nieprawidłowy kod JSON,

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

pojawi się błąd:

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

Diagnostyka

  1. Wskaż zasadę JSON na XML, w której wystąpił błąd. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym faultstring nazwa zasady to Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Sprawdź element <Source> określony w nieprawidłowym pliku XML zasady JSON na XML. Na przykład w tej zasadzie JSON na XML element <Source> jest ustawiony na zmienną request:

    <?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. Sprawdź, czy dane wejściowe określone w elemencie <Source> są prawidłowym ładunkiem JSON. Jeśli dane wejściowe są nieprawidłowe lub źle sformułowane, to właśnie jest przyczyną błędu.

    Załóżmy, że do zasady został przekazany następujący nieprawidłowy kod JSON

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

    Oto przykładowe wywołanie interfejsu API, które pokazuje, jak żądanie zostało przekazane:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    Ładunek JSON przekazany w żądaniu jest nieprawidłowy, ponieważ obiekt JSON uruchamia się i kończy się nawiasami kwadratowymi ([ ]). Z tego powodu wyświetlany jest kod błędu:

    steps.json2xml.ExecutionFailed

    Ten błąd może też wystąpić, jeśli element <Source> jest ustawiony na odpowiedź, ale ładunek odpowiedzi JSON jest nieprawidłowy lub źle sformułowany.

Rozwiązanie

Sprawdź, czy dane wejściowe przekazywane do zasady JSON na XML w elemencie <Source> są prawidłowe i nie mają nieprawidłowego formatu.

Aby rozwiązać problem z omówioną powyżej przykładową zasadą JSON na XML, prześlij prawidłowe żądanie ładunku JSON w następujący sposób:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Kod błędu

steps.json2xml.OutputVariableIsNotAvailable

Treść odpowiedzi na błąd

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

Przykładowy błąd

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

Przyczyna

Ten błąd występuje, jeśli zmienna określona w elemencie <Source> zasady JSON na XML jest typu „ciąg znaków”, a element <OutputVariable> nie został zdefiniowany. Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest typu „ciąg znaków”.

Diagnostyka

  1. Wskaż zasadę JSON na XML, w której wystąpił błąd. Możesz go znaleźć w elemencie faultstring w odpowiedzi na błąd. Na przykład w tym faultstring nazwa zasady to Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. W przypadku nieudanej konwersji pliku JSON na XML sprawdź, czy w zasadach nie brakuje elementu <OutputVariable>.

    W tej przykładowej zasadzie JSONToXML brakuje elementu <OutputVariable>:

    <?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. Określ typ zmiennej w elemencie <Source>:

    1. Znajdź w przesyłce API kod, w którym została zdefiniowana zmienna.
    2. Gdy już ustalisz, w której z zasad zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu typ (jeśli jest dostępny).
      2. Jeśli brak atrybutu „type”, zmienna jest uznawana za ciąg znaków.
    3. Jeśli zmienna ma typ ciąg znaków, to jest to przyczyna błędu. Więcej informacji o popularnych zmiennych i ich typach znajdziesz w artykule Przewodnik po zmiennych.

    Spójrz na zmienną PostalCode w powyższej zasadzie JSON na XML.

    Załóżmy na przykład, że zasada Przypisz wiadomości służy do przypisania wartości do zmiennej o nazwie PostalCode, jak pokazano poniżej:

    <?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>
    

    Pamiętaj, że typem zmiennej w polu <AssignVariable> jest ciąg znaków. Zmienna PostalCode jest więc ciągiem znaków.

    Przypomnijmy teraz, że w elemencie <Source> zasady JSONToXML używana jest zmienna PostalCode:

    <Source>PostalCode</Source>
    

    Ponieważ PostalCode jest ciągiem znaków i brakuje elementu <OutputVariable>, pojawia się kod błędu:

    steps.json2xml.OutputVariableIsNotAvailable
    

Rozdzielczość

Upewnij się, że jeśli zmienna określona w elemencie <Source> zasady JSONToXML jest typu ciąg znaków, element <OutputVariable> jest zdefiniowany w zasadzie.

Aby poprawić omówioną powyżej zasadę JSONToXML, dołącz element <OutputVariable> w sposób pokazany poniżej.

  <?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

Kod błędu

steps.json2xml.InCompatibleTypes

Treść odpowiedzi na błąd

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

Przykładowy błąd

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

Przyczyna

Ten błąd występuje, gdy typ zmiennej zdefiniowanej w elemencie <Source> i elemencie <OutputVariable> jest inny. Konieczne jest, aby typ zmiennych w elemencie <Source> i elemencie <OutputVariable> był zgodny.

Prawidłowe typy to message i string.

Diagnostyka

  1. Zidentyfikuj zasady JSON na XML, w których wystąpił błąd. Możesz go znaleźć w elemencie faultstring w odpowiedzi na błąd. Na przykład w tym elemencie faultstring nazwa zasady to JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. W nieprawidłowej zasadzie JSON na XML zwróć uwagę na wartości określone w <OutputVariable> i <Source>.

    Rozważ tę przykładową zasadę:

    <?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. Określ typ zmiennej określonej w elementach <Source> i <OutputVariable>:

    1. Znajdź kod w obrębie serwera proxy interfejsu API, w którym najpierw zdefiniowano każdą z tych zmiennych.
    2. Po ustaleniu zasady, według której zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu typ (jeśli jest dostępny).
      2. Jeśli atrybut type jest nieobecny, zmienna jest uznawana za ciąg znaków.
    3. Jeśli typ zmiennej określonej w parametrye <Source> to ciąg znaków, a typ zmiennej <OutputVariable> to wiadomość lub odwrotnie, jest to przyczyna błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.

    Weźmy za przykład zasadę Assign Message (Przypisz wiadomość), która służy do przypisywania wartości do zmiennej o nazwie PostalCode. Jak pokazano poniżej:

    <?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>
    

    Pamiętaj, że typem zmiennej w polu <AssignVariable> jest ciąg znaków. dlatego zmienna PostalCode jest typu ciąg znaków.

    Przypomnijmy teraz, że w elemencie <Source> zasady JSONToXML używana jest zmienna PostalCode:

    <Source>PostalCode</Source>
    

    Podobnie przypominamy, że w elemencie <OutputVariable> zasady JSONToXML używana jest zmienna response:

    <OutputVariable>response</OutputVariable>
    

    Zmienna PostalCode jest ciągiem znaków, a zmienna response jest typem komunikatu, więc są one niezgodne i pojawia się kod błędu:

    steps.json2xml.InCompatibleTypes
    

    Powyższy błąd może wystąpić również wtedy, gdy zmienna w elemencie <Source> jest typu message, ale zmienna w elemencie <OutputVariable> jest typu „ciąg znaków”.

Rozdzielczość

Upewnij się, że typ zmiennej zdefiniowanej w elemencie <Source> i elemencie <OutputVariable> jest zawsze taki sam. Konieczne jest, aby typ zmiennych w elemencie <Source> i elemencie <OutputVariable> był zgodny. Sprawdź, czy elementy <Source> i <OutputVariable> są zarówno ciągiem tekstowym, jak i typem komunikatu.

Aby poprawić omówioną powyżej zasadę JSON na XML, możesz zadeklarować inną zmienną PostalCode_output typu ciągu przy użyciu zasady Przypisywanie wiadomości i użyć tej zmiennej w elemencie <OutputVariable> zasady JSON na XML.

Zmieniona zasada przypisywania wiadomości:

<?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>

Zmodyfikowana zasada JSONToXML:

<?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

Kod błędu

steps.json2xml.InvalidSourceType

Treść odpowiedzi na błąd

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

Przykładowy błąd

{
    "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"
        }
    }
}

Przyczyna

Ten błąd występuje, gdy typ zmiennej używanej do zdefiniowania elementu <Source> jest nieprawidłowy. Prawidłowe typy zmiennych to messagestring.

Diagnostyka

  1. Zidentyfikuj nieprawidłowy typ źródła używany w zasadzie JSON na XML. Te informacje znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie nieprawidłowym typem jest liczba całkowita.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Sprawdź wszystkie zasady JSON na XML na konkretnym serwerze proxy interfejsu API, na którym wystąpił błąd. W nieprawidłowej zasadzie JSON na XML zanotuj nazwę zmiennej określonej w zasadzie <Source>.

    Przykładowa zasada zawierająca zmienną o nazwie EmployeeID określoną w elemencie <Source>:

<?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. Określ typ zmiennej w elemencie <Source>:

    1. Znajdź kod na serwerze proxy API, w którym najpierw zdefiniowano tę zmienną.
    2. Po ustaleniu zasady, według której zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu typ (jeśli jest dostępny).
      2. Jeśli brak atrybutu „type”, zmienna jest uznawana za ciąg znaków.
    3. Jeśli typ zmiennej podany w parametrye <Source> nie jest ani typem wiadomości, ani typem ciągu znaków, to jest przyczyną błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.

    Załóżmy, że reguła ExtractVariables służy do wyodrębniania wartości z ładunku JSON i przypisuje ją zmiennej EmployeeID typu całkowitego, jak pokazano poniżej:

    <?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>
    

    Przypomnijmy teraz, że w elemencie <Source> zasady JSONToXML używana jest zmienna EmployeeID:

    <Source>EmployeeID</Source>
    

    Ta zmienna ma typ Integer – nie jest to prawidłowy typ <Source>, dlatego serwer proxy interfejsu API kończy się błędem:

    steps.json2xml.InvalidSourceType
    

Rozdzielczość

Upewnij się, że typ zmiennej używanej do określania elementu <Source> to prawidłowe. Prawidłowe typy <Source> to message i string.

Aby uniknąć powyższego błędu w zasadach JSONToXML, możesz użyć zmiennej request, która jest typu message lub dowolnego innego ciągu znaków będącego prawidłowym ładunkiem JSON.