Extract Variables のランタイム エラーのトラブルシューティング

SourceMessageNotAvailable

エラーコード

steps.extractvariables.SourceMessageNotAvailable
    

エラー レスポンスの本文

    {
      "fault": {
          "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
          "detail": {
              "errorcode": "steps.extractvariables.SourceMessageNotAvailable"
          }
      }
    }
    

原因

このエラーは、Extract Variables ポリシー<Source> 要素で指定された message 変数が次のいずれかの場合に発生します。

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

たとえば、Extract Variables ポリシーがリクエスト フローで実行されているときに、リクエスト フローに存在しない response または error<Source> 要素に設定されていると、このエラーが発生します。

診断

  1. エラーが発生した Extract Variables ポリシーと使用できない変数名を特定します。どちらの項目もエラー レスポンスの faultstring 要素で確認できます。たとえば、次の faultstring では ExtractVariables-1 がポリシー名、response が変数です。

    "faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"

  2. エラーが発生した Extract Variables ポリシーの XML で、要素に設定された変数名が、問題のある文字列で特定された変数名(上記の手順 1)に一致していることを確認します。たとえば、次の Extract Variables ポリシーでは要素に response という変数が指定されていますが、これは問題の文字列と一致しています。

    <ExtractVariables name="ExtractVariables-1">
            <Source>response</Source>
            <URIPath>
                <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
            </URIPath>
            <VariablePrefix>urirequest</VariablePrefix>
        </ExtractVariables>
        
  3. <Source> 要素で使用されている変数が定義済みで、Extract Variables ポリシーが実行されるフローで使用できることを確認します。

  4. 変数が次のいずれかに該当するかどうか確認します。

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

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

    たとえば、上記の Extract Variables ポリシーがリクエスト フローで実行されているとします。response 変数は、Extract Variables ポリシーの <Source> 要素で使用されています。response 変数は、レスポンス フローでのみ使用できます。

    response 変数がリクエスト フローに存在しないため、エラーコード steps.extractvariables.SourceMessageNotAvailable を受信します。

解決策

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

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

<ExtractVariables name="ExtractVariables-1">
        <Source>request</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    

SetVariableFailed

エラーコード

steps.extractvariables.SetVariableFailed
    

エラー レスポンスの本文

    {
        "fault": {
            "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]",
            "detail": {
                "errorcode": "steps.extractvariables.SetVariableFailed"
            }
        }
    }
    

原因

このエラーは、Extract Variables ポリシーで変数に値を設定できなかった場合に発生します。通常、ネストされたドット区切り形式で名前が同じ単語で始まる複数の変数に値を割り当てようとすると、このエラーが発生します。

たとえば、変数 var.color に値を作成または割り当てるとします。この場合、color はオブジェクト ノードとして割り当てられています。この状態で別の変数 var.color.next に値を割り当てようとすると、color がすでに存在するためエラーが発生します。このノードに別の変数を割り当てることはできません。

診断

  1. エラーが発生した Extract Variables ポリシーと、値を設定できなかった変数名を特定します。どちらの項目もエラー レスポンスの faultstring 要素で確認できます。たとえば、次の例では ExtractColors がポリシー名、var.color.next が変数です。

    "faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"

  2. エラーが発生した Extract Variables ポリシーの XML で、変数の名前が、問題のある文字列(上記の手順 1)で特定した変数名と一致しているかどうか確認します。たとえば、次のポリシーでは、リクエスト クエリ パラメータの値を var.color.next という名前の変数に割り当てようとしていますが、この値は問題のある文字列に一致しています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractColors">
            <DisplayName>ExtractColors</DisplayName>
            <Source>request</Source>
            <QueryParam name="color">
                <Pattern ignoreCase="true">{color}</Pattern>
            </QueryParam>
            <QueryParam name="nextcolor">
                <Pattern ignoreCase="true">{color.next}</Pattern>
            </QueryParam>
            <VariablePrefix>var</VariablePrefix>
        </ExtractVariables>
        
  3. 失敗した Extract Variables ポリシーで使用されている変数名をすべて調べます。問題のある文字列(上記の手順 1)で特定した変数名と同じ名前で始まる別の変数に値を割り当てている場合は、これがエラーの原因です。

    上記の Extract Variables ポリシーの例では、次の点に注意してください。

    • 最初に color というクエリ パラメータの値が変数 var.color に割り当てられています(注: var は、<VariablePrefix> 要素に設定されたすべての変数のプレフィックスです)。
    • 次の割り当てで、nextcolor クエリ パラメータの値が別の変数 var.color.next に割り当てられました。
    • var.color はすでに割り当てられているため、Extract Variables ポリシーで、ネストされた別の変数 var.color.next を割り当てることはできません。このため、次のエラーコードを受信しています。steps.extractvariables. SetVariableFailed

解決策

  1. ネストされたドット区切り形式で名前が同じ単語で始まる複数の変数を使用しないようにします。

    上記の Extract Variables ポリシーを修正するには、変数名 var.nextcolor. を使用するように、変数名 var.color.next を変更します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractColors">
            <DisplayName>ExtractColors</DisplayName>
            <Source>request</Source>
            <QueryParam name="color">
                <Pattern ignoreCase="true">{color}</Pattern>
            </QueryParam>
            <QueryParam name="nextcolor">
                <Pattern ignoreCase="true">{nextcolor}</Pattern>
            </QueryParam>
            <VariablePrefix>var</VariablePrefix>
        </ExtractVariables>
    
        

詳細情報

詳細については、こちらのコミュニティ投稿をご覧ください。

InvalidJSONPath

エラーコード

steps.extractvariables.InvalidJSONPath
    

エラー レスポンスの本文

    {
        "fault": {
            "faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
            "detail": {
                "errorcode": "steps.extractvariables.InvalidJSONPath"
            }
        }
    }
    

原因

このエラーは、無効な JSON パスが Extract Variables ポリシーの <JSONPath> 要素で使用される場合に発生します。たとえば、JSON ペイロードにオブジェクト Name がないときに、Extract Variables ポリシーでパスとして Name を指定すると、このエラーが発生します。

診断

  1. エラーが発生した Extract Variables ポリシーと無効な JSON パスを特定します。どちらの項目もエラー レスポンスの faultstring 要素で確認できます。たとえば、次のエラー文字列では、ExtractJSONVariables がポリシー名、$.Name が無効な JSON パスです。

    "faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."

  2. 失敗した Extract Variables ポリシーの XML で、<JSONPath> 要素に設定されている JSON パスが、問題のある文字列(上記の手順 1)で特定したパスと一致することを確認します。たとえば、次の Extract Variables ポリシーでは、JSON パス $.Name が指定されていますが、これは問題の文字列と一致しています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables">
            <Source>response</Source>
            <JSONPayload>
                <Variable name="name" type="string">
                    <JSONPath>$.Name</JSONPath>
                </Variable>
            </JSONPayload>
           <VariablePrefix>employee</VariablePrefix>
        </ExtractVariables>
        
  3. <Source> 要素を調べて、変数の抽出元の JSON ペイロードを特定します。たとえば、<Source> 要素が request に設定されている場合、リクエスト オブジェクトから JSON ペイロードが抽出されています。response に設定されている場合は、レスポンス オブジェクトになります。

    上記の Extract Variables ポリシーの例では、<Source> 要素が response に設定されているので、レスポンスの JSON ペイロードから変数が抽出されています。

    <Source>response</Source>

  4. 該当する JSON ペイロード(手順 3 で特定)を調べて、<JSONPath> 要素にオブジェクトが指定されているかどうか確認します。このオブジェクトが JSON ペイロードに含まれていない場合、これがエラーの原因です。

    たとえば、次の JSON レスポンス ペイロードから変数を抽出するとします。

    {
          "firstName":"John",
          "lastName":"Doe",
          "city":"San Jose",
          "state":"CA"
        }
        

    JSON レスポンス ペイロードに Name オブジェクトが含まれていないため、Extract Variables ポリシーが失敗し、steps.extractvariables.InvalidJSONPath というエラーコードを受信します。

解決策

  1. 変数を抽出する JSON ペイロードに含まれるオブジェクトだけを Extract Variables ポリシーの <JSONPath> 要素に指定します。

    上記の Extract Variables ポリシーの例を修正するには、<JSONPath> 要素を変更してサンプルの JSON レスポンス ペイロードで使用可能なオブジェクトを指定します(この例ではオブジェクト firstNamelastName が有効です)。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables">
            <Source>response</Source>
            <JSONPayload>
                <Variable name="name" type="string">
                    <JSONPath>$.firstName</JSONPath>
                </Variable>
            </JSONPayload>
           <VariablePrefix>employee</VariablePrefix>
        </ExtractVariables>
    
        

ExecutionFailed

エラーコード

steps.extractvariables.ExecutionFailed
    

エラー レスポンスの本文

    {
        "fault": {
            "faultstring": "Failed to execute the ExtractVariables: [policy_name]",
            "detail": {
                "errorcode": "steps.extractvariables.ExecutionFailed"
            }
        }
    }
    

考えられる原因

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

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

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

Extract Variables ポリシーで JSON または XML ペイロードから変数を抽出するときに、<Source> 要素に指定された変数のコンテンツ(ペイロード)が空の場合、このエラーが発生します。

たとえば、Extract Variables ポリシーの <Source> 要素が request または response に設定され、これらが JSON または XML ペイロードに存在することが前提になっている場合、ペイロードが空になっているとエラーが発生します。

診断

  1. エラーが発生した Extract Variables ポリシーを特定します。この情報は、エラー レスポンスの faultstring 要素で確認できます。たとえば、次の faultstring では ExtractJSONVariables がポリシー名です。

    "faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"

  2. 失敗した Extract Variables の XML で <Source> 要素を調べて、変数の抽出元の入力タイプを特定します。たとえば、次の Extract Variables ポリシーでは <Source> 要素が response に設定され、XML ペイロードから要素が抽出されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true">
            <XMLPayload>
                <Namespaces/>
                <Variable name="City" type="string">
                    <XPath>/city</XPath>
                </Variable>
            </XMLPayload>
            <Source clearPayload="false">response</Source>
        </ExtractVariables>
    
        
  3. Extract Variables ポリシーで解析される入力が空かどうか確認します。入力が空であれば、これがエラーの原因です。

    上記の Extract Variables ポリシーの例では、バックエンド サーバーから送信されたレスポンス ペイロード(レスポンスの本文)が空になっています。

    XML のレスポンス ペイロードが空のため、次のエラーコードを受信します。

    steps.extractvariables.ExecutionFailed

    <Source> 要素が request に設定され、ペイロードが API プロキシ リクエストに渡されていない場合にも、このエラーが発生します。例を示します。

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

    この Extract Variables ポリシーは、メッセージの Content-Type ヘッダーが application/xmltext/xmlapplication/*+xml の場合にのみ、XML 抽出を実行します。Extract Variables ポリシーで XML リクエスト ペイロードを解析する場合は、Content-Type ヘッダーを application/xmltext/xmlapplication/*+xml として渡す必要があります。

解決策

Extract Variables ポリシーに空でない有効な入力を渡します。

上記の Extract Variables ポリシーの例の問題を修正するには、有効な XML ペイロードを渡します。例:

  1. 次のコンテンツを含むファイルを city.xml という名前で作成します。

    <city>Bengaluru</city>
        <area>Sanjaynagar</area>
        
  2. 次の cURL コマンドで API 呼び出しを行います。

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

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

Extract Variables ポリシーが無効または不正な形式の入力を解析すると、このエラーが発生します。

たとえば、入力として次の無効な JSON を Extract Variables ポリシーに渡すと、このエラーが発生します。

[
        "args": ["name" : "amar" ]
    ]
    

診断

  1. エラーが発生した Extract Variables ポリシーを特定します。この情報は、エラー レスポンスの faultstring 要素で確認できます。たとえば、次の faultstring では ExtractJSONVariables がポリシー名です。

    "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"

  2. 失敗した Extract Variables の XML で <Source> 要素を調べて、変数の抽出元の入力タイプを特定します。たとえば、次の Extract Variables ポリシーでは <Source> 要素が request に設定され、JSON ペイロードから要素が抽出されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
            <JSONPayload>
                <Variable name="Name" type="string">
                    <JSONPath>$.args.name</JSONPath>
                </Variable>
            </JSONPayload>
            <Source clearPayload="false">request</Source>
        </ExtractVariables>
    
        
  3. Extract Variables ポリシーで解析される入力が有効かどうか確認します。入力が無効か、不正な形式である場合、これがエラーの原因です。

    上記の Extract Variables ポリシーでは、次の無効な JSON が Extract Variables ポリシーに渡されています。

    [
            "args": ["name" : "amar" ]
        ]
        

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

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

    角括弧([ ])付きの配列が含まれているため、API に渡された JSON ペイロードは無効です。このため、次のエラーコードを受信します。

    steps.extractvariables.ExecutionFailed
        

    このエラーは、<Source> 要素が response に設定されているにもかかわらず、JSON レスポンスのペイロードが無効あるいは不正な形式な場合にも発生する可能性があります。

解決策

有効で、不正な形式でない入力を Extract Variables ポリシーに渡します。

上記の Extract Variables ポリシーの問題を解決するには、次のように有効な JSON ペイロードを渡します。

{
       "args":{
          "name":"amar"
       }
    }
    

UnableToCast

エラーコード

steps.extractvariables.UnableToCast
    

エラー レスポンスの本文

    {
        "fault": {
            "faultstring": "Unable to cast value [value] as [type].",
            "detail": {
                "errorcode": "steps.extractvariables.UnableToCast"
            }
        }
    }
    

原因

このエラーは、Extract Variables ポリシーが抽出された値を変数にキャストできなかった場合に発生します。これは通常、あるデータ型の値を別のデータ型の変数に設定しようとすると発生します。

たとえば、Extract Variable ポリシーで、String 変数から抽出された値を Integer 変数に割り当てようとすると、このエラーが発生します。

診断

  1. Extract Variables ポリシーがキャストに失敗した変数のデータ型を特定します。この情報はエラー レスポンスの faultstring 要素で確認できます。たとえば、次の faultstring では BOOLEAN がオブジェクト タイプです。

    "faultstring":"Unable to cast value 36.231 as BOOLEAN."

  2. 手順 1 で特定した型の変数に値を設定しようとした Extract Variables ポリシーを特定します。

    たとえば、次の Extract Variables ポリシーでは、JSON パス $.latitude から値を抽出し、boolean 型の変数にキャストしていますが、これは問題の文字列と一致しています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
            <JSONPayload>
              <Variable name="latitude" type="boolean">
                  <JSONPath>$.latitude</JSONPath>
              </Variable>
            </JSONPayload>
            <Source clearPayload="false">response</Source>
        </ExtractVariables>
    
        
  3. 抽出している値のデータ型を調べます。このデータは、ヘッダー、URI パス、JSON / XML ペイロード、フォーム パラメータ、クエリ パラメータなどに含まれている可能性があります。

  4. 手順 3 で特定したデータ型とデータの割り当て先の変数のデータ型(手順 2 で特定)が一致しているかどうか確認します。

  5. ソースと宛先のデータ型が一致していない場合、これがエラーの原因です。

    上記の Extract Variables ポリシーの例で、JSON リクエスト ペイロードは次のとおりです。

    {
         "latitude":36.2312
        }
        

    <JSONPath>‘$.latitude’ から抽出される値のデータ型は Integer で、この値を boolean 型の変数に割り当てようとしています。

    抽出される値のデータ型と値を割り当てる変数のデータ型が一致しないため、次のエラーコードを受信します。 steps.extractvariables.UnableToCast

解決策

抽出される値のデータ型と値を割り当てる変数のデータ型を一致させます。

この例の Extract Variables ポリシーを修正するには、変数のデータ型を Integer に変更します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="latitude" type="integer">
                <JSONPath>$.latitude</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    

JsonPathParsingFailure

エラーコード

steps.extractvariables.JsonPathParsingFailure
    

エラー レスポンスの本文

    {
        "fault": {
            "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for for flow variables [variable_name]",
            "detail": {
                "errorcode": "steps.extractvariables.JsonPathParsingFailure"
            }
        }
    }
    

原因

このエラーは、Extract Variables ポリシーが JSON パスを解析できず、<Source> 要素で指定されたフロー変数からデータを抽出できない場合に発生します。通常、<Source> 要素で指定されたフロー変数が現在のフローに存在しない場合に発生します。

たとえば、Extract Variables ポリシーがレスポンス フローで実行され、JSON パスの解析が行われるときに、レスポンス フローに存在しない request.content<Source> 要素に設定されていると、このエラーが発生します。

診断

  1. エラーが発生した Extract Variables ポリシーと、データが抽出されていないフロー変数の名前を特定します。どちらの項目もエラー レスポンスの faultstring 要素で確認できます。たとえば、次の faultstring では ExtractVariables-1 がポリシー名、request.content が変数です。

    "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for for flow variables request.content"

  2. エラーが発生した Extract Variables ポリシーの XML で、<Source> 要素に設定された変数名が、問題のある文字列で特定された変数名(上記の手順 1)に一致していることを確認します。たとえば、次の Extract Variables ポリシーでは request.content という変数が指定されていますが、これは faultstring の内容と一致しています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
            <JSONPayload>
                <Variable name="Name" type="string">
                    <JSONPath>$.args.name</JSONPath>
                </Variable>
            </JSONPayload>
            <Source clearPayload="false">request.content</Source>
        </ExtractVariables>
    
        
  3. <Source> 要素で使用されている変数が定義済みで、Extract Variables ポリシーが実行されるフローで使用できることを確認します。

  4. 変数が次のいずれかに該当するかどうか確認します。

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

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

    たとえば、上記の ExtractVariables ポリシーはレスポンス フローで実行されます。フロー変数 request.content は、Extract Variables ポリシーの <Source> 要素で使用されています。フロー変数 request.content は、リクエスト フローでのみ使用できます。

    response 変数がリクエスト フローに存在しないため、エラーコード steps.extractvariables.JsonPathParsingFailure を受信します。

解決策

Extract Variables ポリシーが実行されるフローで、Extract Variables ポリシーの <Source> 要素のフロー変数を使用できるようにします。

たとえば、response.content という変数がレスポンス フローに存在し、抽出する JSON が含まれているとします。上記の Extract Variables ポリシーを修正するため、<Source> 要素を次のように変更します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">response.content</Source>
    </ExtractVariables>