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

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

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 do XML:

  • poza zakresem (niedostępne w określonym procesie, w którym jest wykonywana zasada) lub
  • Nie można rozwiązać (nie jest zdefiniowany)

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

Diagnostyka

  1. Określ zasadę JSON do XML, w której wystąpił błąd, oraz 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 pliku XML zasad JSON do XML, które nie zostały wykonane, sprawdź, czy nazwa zmiennej ustawionej w elemencie <Source> jest zgodna z nazwą zmiennej podaną w ciągu błędu (krok 1 powyżej). Na przykład poniższa zasada JSON do XML określa zmienną o nazwie response w elemencie <Source>, która pasuje do elementu 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. Sprawdź, czy zmienna użyta w elemencie <Source> jest zdefiniowana i dostępna w przepływie, w którym wykonywana jest zasada JSON do XML.

  4. Jeśli zmienna ma wartość:

    • poza zakresem (niedostępne w określonym procesie, w którym jest wykonywana zasada) lub
    • Nie można rozwiązać (nie jest zdefiniowany)

    wtedy to jest przyczyną błędu.

    Załóżmy na przykład, że zasada JSON do XML pokazana powyżej ma być wykonywana w przepływie request. Pamiętaj, że zmienna response jest używana w elemencie <Source> zasady JSON do XML. Zmienna odpowiedzi jest dostępna tylko w przepływie odpowiedzi.

    Ponieważ zmienna response nie występuje w przepływie żądania, otrzymasz kod błędu:

    steps.json2xml.SourceUnavailable
    

Rozdzielczość

Sprawdź, czy zmienna ustawiona w elemencie <Source> nieudanej zasady JSON do XML jest zdefiniowana i występuje w przepływie, w którym jest wykonywana.

Aby poprawić pokazaną powyżej przykładową zasadę JSON na XML, możesz zmodyfikować element <Source>, aby używać 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 danych wejściowych Ładunek wejściowy (JSON) jest pusty.
Nieprawidłowe lub niepoprawne dane wejściowe Dane wejściowe (JSON) przekazane do zasady JSON to XML są nieprawidłowe lub źle sformatowane.

Przyczyna: brak ładunku danych wejściowych

W zasadach JSON do XML ten błąd występuje, jeśli treść (ładunek) zmiennej określonej w elemencie <Source> jest pusta.

Jeśli na przykład element <Source> w zasadach JSON do XML jest ustawiony jako zmienna request lub response i powinien zawierać ładunek JSON, ale ładunek jest pusty, wystąpi błąd.

Diagnostyka

  1. Określ zasadę JSON do 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> w nieudanym pliku XML zasad JSON do XML i określ podaną zmienną. Na przykład w tych zasadach konwersji z JSON na XML element <Source> ma wartość 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 określona dla elementu <Source> w zasadach jest pusta. Jeśli jest pusta, to jest to przyczyna błędu.

    W przykładowej zasadzie JSON do XML pokazanej powyżej ładunek żądania (czyli treść żądania) wysłany przez klienta jest pusty.

    Na przykład:

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

    Ładunek odpowiedzi JSON jest pusty, więc otrzymasz kod błędu:

    steps.json2xml.ExecutionFailed
    

    Ten błąd może też wystąpić, jeśli element <Source> jest ustawiony na odpowiedź, ale serwer backendu przekazuje pusty ładunek.

Rozdzielczość

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

Aby rozwiązać problem z przykładową zasadą JSON do XML, przekaż prawidłowy ładunek JSON. Na przykład:

  1. Utwórz plik o nazwie city.json z taką treścią:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Wywołaj interfejs API za pomocą polecenia cURL w ten 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 pojawia się, gdy zasada JSON do XML analizuje nieprawidłowe lub źle sformatowane dane wejściowe.

Jeśli na przykład poniższy nieprawidłowy kod JSON zostanie podany jako dane wejściowe do zasady JSON do XML,

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

Pojawi się błąd:

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

Diagnostyka

  1. Określ zasadę JSON do 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 zasad JSON do XML. Na przykład w poniższych zasadach JSON do 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 błędnie sformatowane, to jest to przyczyną błędu.

    Załóżmy, że do zasady przekazano ten nieprawidłowy kod JSON:

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

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

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

    Dane JSON przekazane w żądaniu są nieprawidłowe, ponieważ obiekt JSON zaczyna się i kończy nawiasami kwadratowymi ([ ]). Z tego powodu otrzymujesz kod błędu:

    steps.json2xml.ExecutionFailed

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

Rozdzielczość

Sprawdź, czy dane wejściowe przekazywane do zasady JSON to XML w elemencie <Source> są prawidłowe i nie są nieprawidłowo sformatowane.

Aby rozwiązać problem z przykładową zasadą JSON do XML omówioną powyżej, przekaż prawidłowe żądanie ładunku JSON w ten 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 do XML jest typu string, a element <OutputVariable> nie jest zdefiniowany. Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest typu ciąg znaków.

Diagnostyka

  1. Określ zasadę JSON do XML, w której wystąpił błąd. Znajdziesz go w elemencie faultstring 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 zasadach nieudanego przekształcenia JSON na XML sprawdź, czy brakuje elementu <OutputVariable>.

    W tym przykładowym pliku zasad 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 podanej w elemencie <Source>:

    1. Znajdź w proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
    2. Gdy ustalisz, w których zasadach zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu type (jeśli jest obecny).
      2. Jeśli atrybut type nie występuje, zmienna jest traktowana jako ciąg znaków.
    3. Jeśli typ zmiennej to ciąg znaków, to jest to przyczyną błędu. Więcej informacji o najczęstszych zmiennych i ich typach znajdziesz w tym artykule.

    Na przykład w powyższych zasadach dotyczących konwersji z JSON na XML zwróć uwagę na zmienną PostalCode.

    Załóżmy na przykład, że zasada Assign Message 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>
    

    Zwróć uwagę, że typ zmiennej ustawiony w <AssignVariable> to ciąg znaków. Zmienna PostalCode jest więc typu ciąg znaków.

    Pamiętaj, że zmienna PostalCode jest używana w elemencie <Source> zasady JSONToXML:

    <Source>PostalCode</Source>
    

    Ponieważ PostalCode jest typu string, a element <OutputVariable> nie występuje, otrzymujesz kod błędu:

    steps.json2xml.OutputVariableIsNotAvailable
    

Rozdzielczość

Sprawdź, czy jeśli zmienna określona w elemencie <Source> zasady JSONToXML jest typu string, element <OutputVariable> jest zdefiniowany w zasadzie.

Aby poprawić opisaną powyżej zasadę JSONToXML, dodaj element <OutputVariable>, jak pokazano 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, jeśli typ zmiennej zdefiniowanej w elemencie <Source> i elemencie <OutputVariable> nie jest taki sam. Typ zmiennych zawartych w elementach <Source> i <OutputVariable> musi być zgodny.

Prawidłowe typy to message i string.

Diagnostyka

  1. Określ zasadę JSON do XML, w której wystąpił błąd. Znajdziesz go w elemencie faultstring odpowiedzi na błąd. Na przykład w tym faultstring nazwa zasady to JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. W przypadku zasady Nieudana konwersja JSON na XML zanotuj wartości podane w polach <OutputVariable> i <Source>.

    Przyjrzyj się temu przykładowi 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 podanej w elementach <Source> i <OutputVariable>:

    1. Znajdź w proxy interfejsu API kod, w którym każda z tych zmiennych została zdefiniowana po raz pierwszy.
    2. Gdy ustalisz, w których zasadach zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu type (jeśli jest obecny).
      2. Jeśli atrybut type nie występuje, zmienna jest traktowana jako ciąg znaków.
    3. Jeśli typ zmiennej określony w parametrze <Source> to ciąg znaków, a typ parametru <OutputVariable> to wiadomość lub odwrotnie, to jest to przyczyną błędu. Więcej informacji o najczęściej używanych zmiennych i ich typach znajdziesz w tym artykule.

    Rozważmy na przykład zasadę Assign Message, 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>
    

    Zwróć uwagę, że typ zmiennej ustawiony w <AssignVariable> to ciąg znaków, dlatego zmienna PostalCode jest typu ciąg znaków.

    Pamiętaj, że zmienna PostalCode jest używana w elemencie <Source> zasady JSONToXML:

    <Source>PostalCode</Source>
    

    Pamiętaj też, że zmienna response jest używana w elemencie <OutputVariable> zasady JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    Ponieważ PostalCode jest typu string, a zmienna response jest typu message, są to typy niezgodne, więc otrzymujesz kod błędu:

    steps.json2xml.InCompatibleTypes
    

    Powyższy błąd może też wystąpić, jeśli zmienna w elemencie <Source> jest typu message, a zmienna w elemencie <OutputVariable> jest typu string.

Rozdzielczość

Upewnij się, że typ zmiennej zdefiniowanej w elemencie <Source> i elemencie <OutputVariable> jest zawsze taki sam. Typ zmiennych zawartych w elementach <Source> i <OutputVariable> musi być zgodny. Oznacza to, że typy elementów <Source> i <OutputVariable> muszą być ciągami znaków lub typami wiadomości.

Aby poprawić zasadę JSON na XML omówioną powyżej, możesz zadeklarować kolejną zmienną PostalCode_output typu string za pomocą zasady przypisywania wiadomości i użyć tej zmiennej w elemencie <OutputVariable> zasady JSON na XML.

Zmodyfikowana 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, jeśli typ zmiennej użytej do zdefiniowania elementu <Source> jest nieprawidłowy.Prawidłowe typy zmiennych to message i string.

Diagnostyka

  1. Określ nieprawidłowy typ źródła użyty w zasadzie JSON do XML. Te informacje znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie nieprawidłowym typem jest Integer.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Sprawdź wszystkie zasady JSON do XML w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. W zasadach „Nie udało się przekonwertować pliku JSON na XML” zanotuj nazwę zmiennej podaną w <Source>.

    Oto przykładowa zasada, w której w elemencie <Source> określono zmienną o nazwie EmployeeID:

<?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 podanej w elemencie <Source>:

    1. Znajdź w proxy interfejsu API kod, w którym ta zmienna została zdefiniowana po raz pierwszy.
    2. Gdy ustalisz, w których zasadach zmienna jest zdefiniowana i wypełniana jako pierwsza, musisz określić jej typ w ten sposób:
      1. Sprawdź wartość atrybutu type (jeśli jest obecny).
      2. Jeśli atrybut type nie występuje, zmienna jest traktowana jako ciąg znaków.
    3. Jeśli typ zmiennej określony w <Source> nie jest typem wiadomości ani ciągiem znaków, to jest to przyczyną błędu. Więcej informacji o najczęściej używanych zmiennych i ich typach znajdziesz w tym artykule.

    Załóżmy na przykład, że zasada ExtractVariables służy do wyodrębniania wartości z ładunku JSON i ustawia wartość zmiennej EmployeeID typu integer, 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>
    

    Pamiętaj, że zmienna EmployeeID jest używana w elemencie <Source> zasady JSONToXML:

    <Source>EmployeeID</Source>
    

    Typ tej zmiennej to Integer, który nie jest prawidłowym typem <Source>, więc serwer proxy API zwraca błąd:

    steps.json2xml.InvalidSourceType
    

Rozdzielczość

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

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