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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

SourceUnavailable

Kod błędu

steps.json2xml.SourceUnavailable

Treść odpowiedzi o błędzie

{
    "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 to XML ma jedną z tych wartości:

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

Ten błąd występuje np. wtedy, gdy zasada z kodu 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 to XML, w której wystąpił błąd, oraz nazwę niedostępnej zmiennej. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w tagu faultstring nazwa zasady to Convert-JSONToXML, a zmienna to response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. W pliku XML zasad JSON-XML, których nie udało się przetworzyć, sprawdź, czy nazwa zestawu zmiennych w elemencie <Source> odpowiada nazwie zmiennej określonej 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 odpowiada zawartości w 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–XML.

  4. Jeśli zmienna to:

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

    to jest jego przyczyna.

    Załóżmy na przykład, że przedstawiona powyżej zasada JSON–XML powinna zostać zrealizowana w procesie żądania. 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ż w przepływie żądania nie ma zmiennej response, pojawia się kod błędu:

    steps.json2xml.SourceUnavailable
    

Rozdzielczość

Sprawdź, czy zmienna ustawiona w elemencie <Source> w nieudanej zasadzie JSON-XML jest zdefiniowana i istnieje w procesie, w którym jest wykonywana.

Aby poprawić pokazaną powyżej przykładową zasadę JSON na XML, możesz zmodyfikować element <Source> tak, aby używał zmiennej request, ponieważ występuje on 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 o błędzie

{
   "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 sformułowane dane wejściowe Dane wejściowe (JSON) przekazane do zasady JSON do XML są nieprawidłowe lub błędnie sformatowane.

Przyczyna: brak ładunku wejściowego

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

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

Diagnostyka

  1. Zidentyfikuj zasadę JSON na XML, w której wystąpił błąd. Te informacje znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w tagu 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 to XML i określ określoną zmienną. Na przykład w tej zasadzie z kodu 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 zasadzie jest pusta. Jeśli pole jest puste, to jest przyczyna błędu.

    W przedstawionej powyżej przykładowej zasadzie JSON na XML ładunek żądania (tj. 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"
    

    Ładunek odpowiedzi JSON jest pusty, dlatego pojawia się 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ść

Upewnij się, że dane wejściowe przekazywane do zasady JSON do XML w elemencie <Source> są prawidłowym ładunkiem JSON i nie są puste.

Aby rozwiązać problem z przykładową zasadą JSON to XML, przekaż 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ł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łędne dane wejściowe

Ten błąd występuje, jeśli zasada JSON to XML analizuje dane wejściowe, które są nieprawidłowe lub źle sformułowane.

Jeśli na przykład w zasadzie JSON do XML podano poniższy nieprawidłowy kod JSON,

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

wystąpi błąd:

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

Diagnostyka

  1. Zidentyfikuj zasadę JSON na XML, w której wystąpił błąd. Te informacje znajdziesz w elemencie faultstring odpowiedzi o błędzie. Na przykład w tagu 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 nieudanym pliku XML zasad JSON to XML. Na przykład w tej zasadzie z kodu 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 błędnie sformatowane, to właśnie jest przyczyną błędu.

    Załóżmy, że do zasady został przekazany poniższy nieprawidłowy kod JSON

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

    Oto przykładowe wywołanie interfejsu API, które pokazuje sposób przekazania żądania:

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

Rozwiązanie

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

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

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Kod błędu

steps.json2xml.OutputVariableIsNotAvailable

Treść odpowiedzi o błędzie

{
    "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 to XML jest ciągiem znaków, a element <OutputVariable> nie jest zdefiniowany. Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest ciągiem znaków.

Diagnostyka

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

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. W nieudanej zasadzie JSON na XML sprawdź, czy brakuje <OutputVariable>.

    W poniższej 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 określony w elemencie <Source>:

    1. Znajdź kod w interfejsie serwera proxy interfejsu API, w którym zmienna została zdefiniowana jako pierwsza.
    2. Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
      1. Sprawdź wartość atrybutu typu (jeśli istnieje).
      2. Jeśli atrybut type nie jest obecny, zmienna jest uznawana za ciąg znaków.
    3. Jeśli typem zmiennej jest ciąg znaków, to jest przyczyną błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.

    Spójrz na przykład na zmienną PostalCode w powyższej zasadzie JSON do XML.

    Załóżmy na przykład, że zasada przypisywania wiadomości służy do przypisywania wartości do zmiennej 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 typ zmiennej ustawiony w funkcji <AssignVariable> to ciąg znaków. Zmienna PostalCode jest więc ciągiem znaków.

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

    <Source>PostalCode</Source>
    

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

    steps.json2xml.OutputVariableIsNotAvailable
    

Rozdzielczość

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

Aby poprawić omówione powyżej zasady JSONToXML, dodaj 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 o błędzie

{
    "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> są różne. Typ zmiennych w elemencie <Source> i elemencie <OutputVariable> musi być taki sam.

Prawidłowe typy to message i string.

Diagnostyka

  1. Wskaż zasadę z formatu JSON na XML, w której wystąpił błąd. Możesz to znaleźć w elemencie faultstring odpowiedzi o błędzie. Na przykład w tagu faultstring nazwa zasady to JSONToXML_checktype:

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

    Przeanalizuj 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ślony w elementach <Source> i <OutputVariable>:

    1. Znajdź kod w interfejsie API serwera proxy, w którym każda z tych zmiennych została zdefiniowana jako pierwsza.
    2. Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
      1. Sprawdź wartość atrybutu typu (jeśli istnieje).
      2. Jeśli atrybut type nie jest obecny, zmienna jest uznawana za ciąg znaków.
    3. Jeśli typ zmiennej określony w zasadzie <Source> to ciąg znaków, a typ zmiennej <OutputVariable> to komunikat lub odwrotnie, to jest przyczyną błędu. Więcej informacji o typowych zmiennych i ich typach znajdziesz w dokumentacji zmiennych.

    Przyjrzyjmy się przykładowi zasady przypisywania wiadomości, 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 typ zmiennej <AssignVariable> jest ciągiem tekstowym, więc zmienna PostalCode jest ciągiem znaków.

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

    <Source>PostalCode</Source>
    

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

    <OutputVariable>response</OutputVariable>
    

    Zmienna PostalCode jest ciągiem znaków, a zmienna response – typem komunikatu, dlatego są to niezgodne typy, dlatego pojawia się 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 w elemencie <OutputVariable> jest ciągiem znaków.

Rozdzielczość

Upewnij się, że typ zmiennej zdefiniowanej w elemencie <Source> i elemencie <OutputVariable> jest zawsze taki sam. Typ zmiennych w elemencie <Source> i elemencie <OutputVariable> musi być taki sam. Upewnij się więc, że typ <Source> i elementów <OutputVariable> są jednocześnie ciągiem tekstowym lub typem komunikatu.

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

Zmodyfikowane zasady 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 o błędzie

{
    "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. Zidentyfikuj nieprawidłowy typ źródła używany w zasadach z formatu JSON do XML. Informacje te znajdziesz w komunikacie o błędzie. Na przykład w poniższym 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 do XML na określonym serwerze proxy interfejsu API, na którym wystąpił błąd. W nieudanej zasadzie JSON na XML zanotuj nazwę zmiennej określonej w <Source>.

    Oto przykładowa zasada ze zmienną o nazwie PracownikID 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 określony w elemencie <Source>:

    1. Znajdź kod w interfejsie proxy API, gdzie najpierw zdefiniowano tę zmienną.
    2. Gdy już określisz zasadę, w której zdefiniujesz i uzupełnisz zmienną, musisz najpierw określić jej typ:
      1. Sprawdź wartość atrybutu typu (jeśli istnieje).
      2. Jeśli atrybut type nie jest obecny, zmienna jest uznawana za ciąg znaków.
    3. Jeśli typ zmiennej określony w zasadzie <Source> nie jest typem komunikatu ani 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 do wyodrębnienia wartości z ładunku JSON służy zasada ExtractVariables, a jej wartość ustawiana jest na zmienną EmployeeID typu liczby całkowitej, 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>
    

    Ponieważ typ tej zmiennej to Integer, co nie jest prawidłowym typem <Source>, 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> jest prawidłowy. Prawidłowe typy <Source> to message i string.

Aby uniknąć powyższego błędu w zasadzie JSONToXML, możesz użyć zmiennej żądania, która jest komunikatem lub dowolnego innego ciągu, który jest prawidłowym ładunkiem JSON.