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

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją 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ład błędu

{
    "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> w zasadach JSON na XML jest:

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada) lub
  • Nie można rozwiązać (niezdefiniowana)

Ten błąd występuje na przykład, gdy zasada konwersji JSON na XML ma być wykonana w przepływie żądania, ale element <Source> ma wartość zmiennej response, która nie istnieje w przepływie żądania.

Diagnostyka

  1. Określ zasadę JSON na 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 w formacie JSON do XML sprawdź, czy nazwa zmiennej ustawiona w elemencie <Source> jest zgodna z nazwą zmiennej wskazaną w ciągu błędów (krok 1 opisany powyżej). Na przykład w tym pliku JSON na potrzeby konwersji na XML w elemencie <Source> określono zmienną o nazwie response, która odpowiada zmiennej w elemencie 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 jest wykonywana zasada) lub
    • Nie można rozwiązać (niezdefiniowana)

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

    Przykładowo załóżmy, że pokazana powyżej zasada JSON na XML powinna być wykonywana w ramach procesu żądania. Zwróć uwagę, że zmienna response jest używana w elemencie <Source> zasady JSON na XML. Zmienne odpowiedzi są dostępne tylko w schemacie odpowiedzi.

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

    steps.json2xml.SourceUnavailable
    

Rozdzielczość

Upewnij się, że zmienna ustawiona w elemencie <Source> w nieudanej regule JSON na XML jest zdefiniowana i występuje w przepływie, w którym jest wykonywana.

Aby poprawić widoczną powyżej przykładową zasadę z JSON na XML, możesz zmodyfikować element <Source>, tak 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 danych wejściowych Dane wejściowe (w formacie JSON) są puste.
Nieprawidłowe lub źle sformatowane dane wejściowe Dane wejściowe (JSON) przekazane do zasad JSON na XML są nieprawidłowe lub zniekształcone.

Przyczyna: brak danych wejściowych

W zasadach konwersji JSON na XML ten błąd występuje, gdy 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 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 pliku XML zasad z błędem w konwersji z formatu JSON na XML i ustanów, która zmienna została podana. 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 określona dla elementu <Source> w zasadach jest pusta. Jeśli pole jest puste, to właśnie on 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, otrzymasz kod błędu:

    steps.json2xml.ExecutionFailed
    

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

Rozdzielczość

Upewnij się, że dane przekazane do zasad konwersji JSON na XML w elemencie <Source> są prawidłowym ładunkiem JSON i nie są puste.

Aby rozwiązać problem z przykładową zasadą JSON na 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, korzystając z 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 źle 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 podasz jako dane wejściowe do zasad JSON na XML nieprawidłowy ciąg tekstowy 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> podany w kodzie XML zasady JSON do XML. Na przykład w zasadach z formatu JSON na XML element <Source> ma wartość zmiennej 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, jest to przyczyna błędu.

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

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

    Oto przykład wywołania interfejsu API, który pokazuje, jak przekazano żądanie:

    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 nawiasem kwadratowym ([ ]). Z tego powodu otrzymujesz 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

Upewnij się, że dane wejściowe przekazane do zasad JSON na XML w elemencie <Source> są prawidłowe i nieuszkodzone.

Aby rozwiązać problem z opisaną powyżej zasadą dotyczącą konwersji z formatu JSON na XML, prześlij prawidłowe żądanie z ładunkiem 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ład błędu

{
    "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> w zasadach JSON na XML jest typu string, a element <OutputVariable> nie jest zdefiniowany. Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest typu string.

Diagnostyka

  1. Wskaż zasadę JSON na XML, w której wystąpił błąd. Znajdziesz go w elemencie faultstring odpowiedzi na błąd. Na przykład w tym elemencie 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 określonej w elemencie <Source>:

    1. Znajdź w interfejsie API Proxy 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 type (jeśli występuje).
      2. Jeśli atrybut type jest nieobecny, 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 przypisywania wiadomości jest używana do przypisywania wartości 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 zmienna ustawiona w parametryzu <AssignVariable> ma typ ciąg znaków. Zmienne PostalCode jest więc typu string.

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

    <Source>PostalCode</Source>
    

    Ponieważ element PostalCode jest typu ciąg znaków, a element <OutputVariable> jest nieobecny, otrzymujesz kod błędu:

    steps.json2xml.OutputVariableIsNotAvailable
    

Rozdzielczość

Jeśli zmienna określona w elemencie <Source> w zasadach JSONToXML jest typu string, upewnij się, że element <OutputVariable> jest zdefiniowany w zasadach.

Aby poprawić zasadę JSONToXML, o której mowa powyżej, 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ład błędu

{
    "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. Typ zmiennych zawartych w elemencie <Source> i elemencie <OutputVariable> musi być taki sam.

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 faultstring nazwa zasady to JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. W pliku JSON do XML Policy, który nie został przekonwertowany, zwróć uwagę na wartości określone w elementach <OutputVariable><Source>.

    Weź pod uwagę 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ź w interfejsie API Proxy kod, w którym po raz pierwszy zdefiniowano te zmienne.
    2. Gdy ustalisz zasadę, 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 type (jeśli występuje).
      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 popularnych zmiennych i ich typach znajdziesz w artykule Przewodnik po zmiennych.

    Na przykład zasada przypisywania wiadomości, która służy do przypisywania wartości zmiennej o nazwie PostalCode, wygląda tak:

    <?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 typem zmiennej ustawiony w elemencie <AssignVariable> to ciąg znaków, a dlatego zmienna PostalCode ma typ ciąg znaków.

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

    <Source>PostalCode</Source>
    

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

    <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ład błędu

{
    "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. Określ nieprawidłowy typ źródła używany w zasadach JSON do XML. Te informacje znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie nieprawidłowy typ to Integer.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Sprawdź wszystkie zasady konwersji z formatu JSON na XML w przypadku konkretnego interfejsu Proxy API, w którym wystąpił błąd. W nieudanej konwersji JSON na XML Policy zapisz nazwę zmiennej określonej w sekcji <Source>.

    Oto przykładowa zasada, która zawiera 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ź w interfejsie API Proxy kod, w którym ta zmienna została zdefiniowana po raz pierwszy.
    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 type (jeśli występuje).
      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 popularnych zmiennych i ich typach znajdziesz w artykule Przewodnik po zmiennych.

    Dla przykładu załóżmy, że do wyodrębnienia wartości z ładunku JSON używana jest zasada ExtractVariables i ustawia ją 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> w zasadach JSONToXML:

    <Source>EmployeeID</Source>
    

    Ponieważ typ tej zmiennej to Integer, który nie jest prawidłowym typem <Source>, usługa Proxy API kończy działanie z błędem:

    steps.json2xml.InvalidSourceType
    

Rozdzielczość

Sprawdź, czy 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 typu komunikat, lub dowolnego innego ciągu znaków, który jest prawidłowym ładunkiem JSON.