XML to JSON ポリシーのランタイム エラーのトラブルシューティング

SourceUnavailable

エラーコード

steps.xml2json.SourceUnavailable
    

エラー レスポンスの本文

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

エラー メッセージの例

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

原因

このエラーは、XML to JSON ポリシーの <Source> 要素で指定されたメッセージまたは文字列変数が次のいずれかの状態である場合に発生します。

  • 範囲外(ポリシーが実行されている特定のフローで使用できない)
  • 解決できない(定義されていない)

たとえば、XML to JSON ポリシーがリクエスト フローで実行されなければならないにもかかわらず、このリクエスト フローに存在しない response 変数が <Source> 要素に設定されている場合に、このエラーが発生します。

診断

  1. エラーが発生した XML to JSON ポリシーと、使用できない変数の名前を特定します。どちらの項目も、エラー レスポンスの faultstring 要素を調べるとわかります。たとえば、次の faultstring では、該当するポリシー名は Convert-XMLToJSON、変数は response です。

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
        
  2. エラーが発生した XML to JSON ポリシーの XML で、<Source> 要素内に設定された変数名が、faultstring で特定した変数名(上記のステップ 1)に一致していることを確認します。たとえば、次の XML to JSON ポリシーでは、<Source> 要素で response という名前の変数を指定しています。この変数名は、faultstring で特定した変数名と一致しています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
            <DisplayName>Convert-XMLToJSON</DisplayName>
            <Properties/>
            <Format>google</Format>
            <OutputVariable>response</OutputVariable>
            <Source>response</Source>
        </XMLToJSON>
        
  3. <Source> 要素で使われている変数が定義されていて、XML to JSON ポリシーが実行されるフローで使用できることを確認します。

  4. 変数が次のいずれかの状態になっていないか確認します。

    • 範囲外(ポリシーが実行されている特定のフローで使用できない)
    • 解決できない(定義されていない)

    いずれかの状態が当てはまる場合、それがエラーの原因です。

    たとえば、上記の XML to JSON ポリシーがリクエスト フローで実行されるとします。response 変数は XML to JSON ポリシーの <Source> 要素で使われていることを思い出してください。response 変数は、レスポンス フローでのみ使用できます。

    response 変数はリクエスト フローには存在しないため、このエラーを受け取ることになります。

    steps.xml2json.SourceUnavailable
        

解決策

エラーが発生した XML to JSON ポリシーの <Source> 要素に定義済みの変数を使用し、ポリシーが実行されるフローにその変数が存在するようにします。

上記の XML to JSON ポリシーの例を修正するには、リクエスト フローに存在している <Source> 変数を使うように request 要素を修正します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    

ExecutionFailed

エラーコード

steps.xml2json.ExecutionFailed
    

エラー レスポンスの本文

    {
        "fault": {
            "faultstring": "XMLToJSON[policy_name]: Execution failed. reason: Premature end of document while parsing at line [line_number](possibly  around char [character_number])",
            "detail": {
                "errorcode": "steps.xml2json.ExecutionFailed"
            }
        }
    }
    

考えられる原因

このエラーには、次の原因が考えられます。

原因 説明
入力ペイロードがない 入力ペイロード(XML)が空です。
入力が無効であるか形式が正しくない XML to JSON ポリシーに渡された入力(XML)が無効であるか不正な形式です。

原因: 入力ペイロードがない

XML to JSON ポリシーで、<Source> 要素内で指定されている変数の内容(ペイロード)が空の場合、このエラーが発生します。

たとえば、XML to JSON ポリシー内の <Source> 要素が request 変数あるいは response 変数として設定されているとします。この変数には XML のペイロードが格納されなければなりませんが、ペイロードが空であると、このエラーが発生します。

診断

  1. エラーが発生した XML to JSON ポリシーを特定します。この情報はエラー レスポンスの faultstring 要素で調べることができます。たとえば、次の faultstring では、該当するポリシー名は Convert-XMLToJSON です。

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
        
  2. エラーが発生した XML to JSON ポリシーの XML で <Source> 要素を調べ、そこで指定されている変数を確認します。たとえば、次の XML to JSON ポリシーでは <Source> 要素が request に設定されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
            <DisplayName>Convert-XMLToJSON</DisplayName>
            <Properties/>
            <Options>
                <RecognizeNumber>true</RecognizeNumber>
                <RecognizeBoolean>true</RecognizeBoolean>
                <RecognizeNull>true</RecognizeNull>
            </Options>
            <OutputVariable>request</OutputVariable>
            <Source>request</Source>
        </XMLToJSON>
        
  3. XMLToJSON ポリシーの <Source> 要素で指定されている変数が空であるかどうか確認します。空の場合、それがエラーの原因です。

    上記の XML to JSON ポリシーの例では、クライアントから送信されたリクエストのペイロード(つまり、リクエストの本文)が空になっています。

    例:

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

    XML リクエストのペイロードが空であるため、次のエラーコードを受け取ります。

    steps.xml2json.ExecutionFailed
        

    <Source> 要素が response に設定されている場合でも、バックエンド サーバーから空のペイロードが渡されると、このエラーが発生します。

解決策

<Source> 要素によって XML to JSON ポリシーに渡される入力が、空ではない有効な XML ペイロードになるようにします。

上記の XML to JSON ポリシーの例を修正するには、有効な XML ペイロードを渡します。次に例を示します。

  1. city.xml という名前のファイルを作成し、次の内容を含めます。

    <?xml version="1.0" encoding="UTF-8"?>
        <root>
           <City>Bengaluru</City>
           <Name>Apigee</Name>
           <Pincode>560016</Pincode>
        </root>
        
  2. 次の cURL コマンドで API を呼び出します。

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

原因: 入力が無効であるか形式が正しくない

XML to JSON ポリシーが、無効あるいは不正な形式の入力を解析した場合、このエラーが発生します。

たとえば、次の無効な JSON が入力として XML to JSON ポリシーに渡されたとします。

<?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    

この場合、次のエラーを受け取ります。

"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    

診断

  1. エラーが発生した XML to JSON ポリシーを特定します。この情報はエラー レスポンスの faultstring 要素で調べることができます。たとえば、次の faultstring では、該当するポリシー名は Convert-XMLToJSON です。

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
        
  2. エラーが発生した XML to JSON ポリシーの XML で指定されている <Source> 要素を調べます。たとえば、次の XML to JSON ポリシーでは、<Source> 要素が request 変数に設定されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
            <DisplayName>Convert-XMLToJSON</DisplayName>
            <Properties/>
            <Options>
                <RecognizeNumber>true</RecognizeNumber>
                <RecognizeBoolean>true</RecognizeBoolean>
                <RecognizeNull>true</RecognizeNull>
            </Options>
            <OutputVariable>request</OutputVariable>
            <Source>request</Source>
        </XMLToJSON>
        
  3. <Source> 要素で指定されている XML To JSON ポリシーへの入力が、有効な XML ペイロードであるかどうか確認します。入力が無効であるか不正な形式である場合、それがエラーの原因です。

    上記の XML to JSON ポリシーでは、city.xml ファイルから次の無効な XML が Extract Variables ポリシーに渡されています。

    <?xml version="1.0" encoding="UTF-8"?>
        <root>
           <City>Bengaluru</City>
           <Name>Apigee</Name>
           <Pincode>560016</Pincode>
        

    次の API 呼び出しの例に、リクエストがどのように渡されたかを示します。

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltpjson" -H "Content-Type: application/xml" -X POST -d @city.xml
        

    XML には <root> 要素の終了タグがないため、API に渡された XML ペイロードは無効です。したがって、次のエラーコードを受け取ります。

    steps.xml2json.ExecutionFailed
        

    <Source> 要素が response に設定されている場合でも、バックエンド サーバーから無効あるいは不正な形式の XML レスポンスのペイロードが渡されると、このエラーが発生します。

解決策

<Source> 要素によって XML to JSON ポリシーに渡される入力が、有効で不正な形式ではない XML ペイロードになるようにします。

上記で説明した XML to JSON ポリシーの例を修正するには、次のように有効な XML ペイロードを渡します。

<?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    

OutputVariableIsNotAvailable

エラーコード

steps.xml2json.OutputVariableIsNotAvailable
    

エラー レスポンスの本文

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

エラー メッセージの例

{
        "fault": {
            "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available.",
            "detail": {
                "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
            }
        }
    }
    

原因

このエラーは、XML to JSON ポリシーの <Source> 要素で string 型の変数が指定されている一方、<OutputVariable> 要素が定義されていない場合に発生します。<Source> 要素で定義する変数の型が string の場合、<OutputVariable> は必須です。

診断

  1. エラーが発生した XML to JSON ポリシーを特定します。これは、エラー レスポンスの faultstring 要素を調べるとわかります。たとえば、次の faultstring では、該当するポリシー名は Convert-XMLToJSON です。

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
        
  2. エラーが発生した XML to JSON ポリシーに、<OutputVariable> がないかどうか確認します。

    次の XML to JSON ポリシーの例には、<OutputVariable> 要素がありません。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
            <DisplayName>Convert-XMLToJSON</DisplayName>
            <Properties/>
            <Format>google</Format>
            <Source>TrackingNumber</Source>
        </XMLToJSON>
    
        
  3. <Source> 要素で指定されている変数の型を特定します。

    1. API プロキシ バンドルで、最初にその変数が定義されたコードを特定します。
    2. その変数が最初に定義されて値が取り込まれるポリシーを特定したら、次のようにして変数の型を特定する必要があります。
      1. type 属性の値を確認します(存在する場合)。
      2. type 属性がない場合、変数は文字列とみなされます。
    3. 変数の型が string の場合、それがエラーの原因です。よく使われる変数とその型については、変数リファレンスをご覧ください。

    たとえば、上記の XML to JSON ポリシーに含まれる TrackingNumber 変数に注目してください。この変数の型は string です。ここで、次のように Assign Message ポリシーを使って、変数 TrackingNumber に値を割り当てるとします。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
            <DisplayName>Assign_TrackingNumber</DisplayName>
            <Properties/>
            <AssignVariable>
                <Name>TrackingNumber</Name>
                <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
                <Ref/>
            </AssignVariable>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <AssignTo createNew="false" transport="http" type="request"/>
        </AssignMessage>
        

    <AssignVariable> によって設定される変数の型は string です。したがって、変数 TrackingNumber の型は string になります。

    TrackingNumber 変数は XML to JSON ポリシーの <Source> 要素で使われていることを思い出してください。

    <Source>TrackingNumber</Source>
        

    TrackingNumber の型は string である一方、<OutputVariable> がポリシーに含まれていないため、次のエラーコードを受け取ります。

    steps.xml2json.OutputVariableIsNotAvailable
        

解決策

XMLToJSON ポリシーの <Source> 要素で指定されている変数の型が string である場合、必須の <OutputVariable> 要素が存在するようにします。

上記で説明した XML To JSON ポリシーを修正するには、次のように <OutputVariable> 要素を含めます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    

InCompatibleTypes

エラーコード

steps.xml2json.InCompatibleTypes
    

エラー レスポンスの本文

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

エラー メッセージの例

{
        "fault": {
            "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type.",
            "detail": {
                "errorcode": "steps.xml2json.InCompatibleTypes"
            }
        }
    }
    

原因

このエラーは、<Source> 要素で定義された変数の型と、<OutputVariable> 要素で定義された変数の型が異なる場合に発生します。<Source> 要素に含まれる変数の型と、<OutputVariable> 要素に含まれる変数の型が一致することは、必須です。

The valid types are message and string.
    

診断

  1. エラーが発生した XML to JSON ポリシーを特定します。これは、エラー レスポンスの faultstring 要素を調べるとわかります。たとえば、以下の faultstring では、該当するポリシー名は XMLToJSON_CheckType です。

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
        
  2. エラーが発生した XML To JSON ポリシーで、<OutputVariable> 要素で指定されている値を調べます。

    次の XMLToJSON ポリシーの例には、<OutputVariable> 要素がありません。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
            <DisplayName>XMLToJSON_CheckType</DisplayName>
            <Properties/>
            <Format>google</Format>
            <OutputVariable>request</OutputVariable>
            <Source>TrackingNumber</Source>
        </XMLToJSON>
        
  3. <Source> 要素と <OutputVariable> 要素で指定されている変数の型を特定します。

    1. API プロキシ バンドルで、それぞれの変数が最初に定義されたコードを見つけます。
    2. その変数が最初に定義されて値が取り込まれるポリシーを特定したら、次のようにして変数の型を特定する必要があります。
      1. type 属性の値を確認します(存在する場合)。
      2. type 属性がない場合、変数は文字列とみなされます。
    3. <Source> で変数の型が string として指定されている一方で <OutputVariable> の型が指定されていない場合、あるいはその逆の場合は、それがエラーの原因です。よく使われる変数とその型については、変数リファレンスをご覧ください。

    たとえば、次のように Assign Message ポリシーを使って、TrackingNumber という名前の変数に値を割り当てるとします。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
            <DisplayName>Assign_TrackingNumber</DisplayName>
            <Properties/>
            <AssignVariable>
                <Name>TrackingNumber</Name>
                <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
                <Ref/>
            </AssignVariable>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <AssignTo createNew="false" transport="http" type="request"/>
        </AssignMessage>
        

    <AssignVariable> によって設定される変数の型は string です。したがって、変数 TrackingNumber の型は string になります。

    TrackingNumber 変数は XMLToJSON ポリシーの <Source> 要素で使われていることを思い出してください。

    <Source>TrackingNumber</Source>
        

    同様に、request 変数は XML To JSON ポリシーの <OutputVariable> 要素で使われています。

    <OutputVariable>request</OutputVariable>
        

    TrackingNumber の型は string であるのに対して、response 変数の型は message であるため、次のエラーコードを受け取ります。

    steps.xml2json.InCompatibleTypes
        

    <Source> 要素に含まれる変数の型が message である一方、<OutputVariable> 要素に含まれる変数の型が文字列の場合も、上記のエラーが発生します。

解決策

<Source> 要素と <OutputVariable> 要素で定義する変数の型が同じになるようにします。<Source> 要素に含まれる変数の型と、<OutputVariable> 要素に含まれる変数の型が一致することは、必須です。

上記の XML to JSON ポリシーを修正するには、Assign Message ポリシーを使って string 型の別の変数 TrackingNumber_output を宣言し、XML to JSON ポリシーの <OutputVariable> 要素でこの変数を使うようにします。

変更後の Assign Message ポリシーは、次のようになります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560098</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <AssignVariable>
            <Name>TrackingNumber_output</Name>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

変更後の XMLToJSON ポリシーは、次のようになります。

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
          <DisplayName>XMLToJSON_CheckType</DisplayName>
          <Properties/>
          <Format>google</Format>
          <OutputVariable>TrackingNumber_output</OutputVariable>
          <Source>TrackingNumber</Source>
      </XMLToJSON>
    

InvalidSourceType

エラーコード

steps.xml2json.InvalidSourceType
    

エラー レスポンスの本文

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

エラー メッセージの例

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

原因

このエラーは、<Source> 要素の定義に使用されている変数の型が無効な場合に発生します。変数の有効な型は、messagestring です。

診断

  1. XML to JSON ポリシーで使用されている無効な型の変数を特定します。この情報はエラー メッセージで確認できます。たとえば、次のエラーでは、無効な型は Integer です。

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
        
  2. エラーが発生した特定の API プロキシで、すべての XML to JSON ポリシーを調べます。エラーが発生した XML To JSON ポリシーで、<Source> で指定されている変数の名前を確認します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
            <DisplayName>XMLToJSON_CheckType</DisplayName>
            <Properties/>
            <Format>google</Format>
            <OutputVariable>response</OutputVariable>
            <Source>BookCode</Source>
        </XMLToJSON>
        
  3. 次のようにして、<Source> 要素で指定されている変数の型を特定します。

    1. API プロキシ バンドルで、最初にその変数が定義されたコードを特定します。
    2. その変数が最初に定義されて値が取り込まれるポリシーを特定したら、次のようにして変数の型を特定する必要があります。
      1. type 属性の値を確認します(存在する場合)。
      2. type 属性がない場合、変数は文字列とみなされます。
    3. <Source> で指定されている変数の型が message でも string でもない場合、それがエラーの原因です。よく使われる変数とその型については、変数リファレンスをご覧ください。

    たとえば、次のように ExtractVariables ポリシーを使って、XML ペイロードから値を抽出し、integer 型の BookCode 変数にその値を割り当てるとします。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode">
            <DisplayName>Extract_BookCode</DisplayName>
            <Properties/>
            <Source>request</Source>
            <XMLPayload stopPayloadProcessing="false">
                <Variable name="BookCode" type="integer">
                    <XPath>/root/BookCode</XPath>
                </Variable>
            </XMLPayload>
        </ExtractVariables>
        

    BookCode 変数は XML To JSON ポリシーの <Source> 要素で使われていることを思い出してください。

    <Source>BookCode</Source>
        

    この変数の型は Integer です。これは有効な <Source> の型でないため、API プロキシは次のエラーで失敗します。

    steps.xml2json.InvalidSourceType
        

解決策

<Source> 要素の指定に、有効な型の変数が使用されるようにします。<Source> の有効な型は、messagestring です。

XML To JSON ポリシーで上記のエラーを回避するには、message 型の request 変数を使用するか、有効な XML ペイロードとなる他の文字列を使用します。