عیب یابی خطای زمان اجرا متغیرها را استخراج کنید

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

منبعپیام در دسترس نیست

کد خطا

steps.extractvariables.SourceMessageNotAvailable

متن پاسخ خطا

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

علت

این خطا زمانی رخ می‌دهد که متغیر پیام مشخص شده در عنصر <Source> از خط‌مشی Extract Variables یکی از موارد زیر باشد:

  • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می‌شود، در دسترس نیست) یا
  • قابل حل نیست (تعریف نشده است)

برای مثال، این خطا زمانی رخ می‌دهد که سیاست Extract Variables در جریان درخواست اجرا شود، اما عنصر <Source> روی متغیر response یا error تنظیم شده باشد، که در جریان درخواست وجود ندارد.

تشخیص

  1. سیاست Extract Variables را که خطا در آن رخ داده است و نام متغیری که در دسترس نیست، شناسایی کنید. می‌توانید هر دوی این موارد را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام سیاست ExtractVariables-1 و متغیر response است:

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

  2. در سیاست XML مربوط به Extract Variables که با شکست مواجه شده است، بررسی کنید که نام مجموعه متغیر در عنصر با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت داشته باشد. برای مثال، سیاست 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 در عنصر <Source> از سیاست Extract Variables استفاده می‌شود. متغیر response فقط در جریان پاسخ در دسترس است.

    از آنجایی که متغیر response در جریان درخواست وجود ندارد، کد خطای steps.extractvariables.SourceMessageNotAvailable را دریافت می‌کنید.

وضوح تصویر

مطمئن شوید که متغیر تنظیم‌شده در عنصر <Source> از سیاست ناموفق Extract Variables، تعریف شده و در جریانی که سیاست در آن اجرا می‌شود، وجود دارد.

برای اصلاح سیاست Extract Variables مثال بالا، می‌توانید عنصر <Source> را طوری تغییر دهید که از متغیر request به همان شکلی که در جریان درخواست وجود دارد، استفاده کند:

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

تنظیم متغیر ناموفق

کد خطا

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. در سیاست XML مربوط به Extract Variables که با شکست مواجه شد، بررسی کنید که نام متغیر با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت داشته باشد. برای مثال، سیاست زیر تلاش می‌کند مقداری را از یک پارامتر پرس‌وجوی درخواست به متغیری به نام 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 را بررسی کنید. اگر مقداری را به متغیر دیگری اختصاص داده‌اید که نام آن با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ بالا) شروع می‌شود، پس علت خطا همان است.

    در مثال مربوط به سیاست Extract Variables که در بالا نشان داده شده است، توجه داشته باشید که:

    • مقدار پارامتر کوئری با نام color ابتدا به متغیر var.color اختصاص داده می‌شود. var.color ( نکته: var پیشوند تمام متغیرهایی است که در عنصر <VariablePrefix> تنظیم شده‌اند)
    • در انتساب بعدی، مقدار پارامتر کوئری nextcolor به متغیر دیگری به نام var.color.next اختصاص داده می‌شود.
    • از آنجایی که var.color از قبل تخصیص داده شده است، سیاست Extract Variables نمی‌تواند متغیر تودرتوی دیگری به نام var.color.next را تخصیص دهد. بنابراین کد خطای steps.extractvariables.SetVariableFailed را دریافت می‌کنید.

وضوح تصویر

  1. مطمئن شوید که چندین نام متغیر که نامشان با کلمات یکسان شروع می‌شود و با نقطه از هم جدا شده‌اند، در کنار هم نداشته باشید.

    برای اصلاح سیاست استخراج متغیرها که در بالا نشان داده شده است، می‌توانید نام متغیر var.color.next را تغییر دهید تا از نام متغیر var.nextcolor.

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

اطلاعات بیشتر

برای جزئیات بیشتر به این پست انجمن مراجعه کنید.

مسیر JSON نامعتبر

کد خطا

steps.extractvariables.InvalidJSONPath

متن پاسخ خطا

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

علت

این خطا در صورتی رخ می‌دهد که یک مسیر JSON نامعتبر در عنصر <JSONPath> از سیاست Extract Variables استفاده شود. برای مثال، اگر یک JSON payload شیء Name نداشته باشد، اما شما Name به عنوان مسیر در سیاست Extract Variables مشخص کنید، این خطا رخ می‌دهد.

تشخیص

  1. خط‌مشی Extract Variables که خطا در آن رخ داده و مسیر JSON نامعتبر را شناسایی کنید. می‌توانید هر دوی این موارد را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در رشته خطای زیر، نام خط‌مشی ExtractJSONVariables و مسیر JSON نامعتبر $.Name است:

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

  2. در XML مربوط به سیاست Extract Variables که با شکست مواجه شده است، بررسی کنید که مسیر JSON تنظیم شده در عنصر <JSONPath> با مسیر شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت داشته باشد. برای مثال، سیاست 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 Payload استخراج کنید. برای مثال، اگر عنصر <Source> روی request تنظیم شده باشد، آنگاه سیاست، JSON Payload را از شیء request استخراج می‌کند. اگر روی response تنظیم شده باشد، آنگاه شیء response خواهد بود.

    در مثال مربوط به سیاست Extract Variables که در بالا نشان داده شده است، عنصر <Source> روی response تنظیم شده است، بنابراین متغیرها از JSON payload پاسخ استخراج می‌شوند.

    <Source>response</Source>

  4. JSON payload مناسب (که از مرحله ۳ تعیین شده است) را بررسی کنید و اعتبارسنجی کنید که آیا شیء مشخص شده در عنصر <JSONPath> را دارد یا خیر. اگر JSON payload آن شیء را نداشته باشد، دلیل خطا همین است.

    به عنوان مثال، در نظر بگیرید که می‌خواهید متغیرها را از فایل پاسخ JSON زیر استخراج کنید:

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

    از آنجایی که فایل پاسخ JSON فاقد شیء Name است، سیاست Extract Variables با خطایی که دریافت می‌کنید، یعنی کد خطا: steps.extractvariables.InvalidJSONPath ، با شکست مواجه می‌شود.

وضوح تصویر

  1. اطمینان حاصل کنید که فقط اشیایی که بخشی از JSON Payload هستند و متغیرها از آنها استخراج می‌شوند، در عنصر <JSONPath> از سیاست Extract Variables مشخص شده‌اند.

    برای اصلاح سیاست Extract Variables مثال بالا، می‌توانید عنصر <JSONPath> را تغییر دهید تا یکی از اشیاء موجود در نمونه JSON response Payload را مشخص کنید (برای مثال، اشیاء firstName و lastName معتبر هستند):

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

اجرا ناموفق بود

کد خطا

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 payload استخراج کند، اما محتوای (payload) متغیر مشخص شده در عنصر <Source> خالی باشد، این خطا رخ می‌دهد.

برای مثال، اگر عنصر <Source> در سیاست Extract Variables به عنوان request یا response تنظیم شده باشد و قرار باشد حاوی بار داده JSON یا XML باشند، اما اگر بار داده خالی باشد، خطا رخ می‌دهد.

تشخیص

  1. سیاست Extract Variables را که خطا در آن رخ داده است، شناسایی کنید. می‌توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام سیاست ExtractJSONVariables است:

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

  2. عنصر <Source> را در فایل XML مربوط به Extract Variables بررسی کنید و نوع ورودی که متغیرها از آن استخراج می‌شوند را تعیین کنید. برای مثال، سیاست 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 که در بالا نشان داده شده است، payload پاسخ (یعنی بدنه پاسخ) که توسط سرور backend ارسال شده بود، خالی بود.

    از آنجایی که فایل پاسخ XML خالی است، کد خطا را دریافت می‌کنید:

    steps.extractvariables.ExecutionFailed

    این خطا همچنین می‌تواند در صورتی رخ دهد که عنصر <Source> روی request تنظیم شده باشد، اما هیچ payload در درخواست پروکسی API ارسال نشده باشد. برای مثال:

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

    سیاست Extract Variables فقط زمانی استخراج XML را انجام می‌دهد که سرآیند Content-Type پیام application/xml ، text/xml یا application/*+xml باشد. اگر می‌خواهید سیاست Extract Variables یک درخواست XML را تجزیه و تحلیل کند، باید سرآیند Content-Type را به صورت application/xml ، text/xml یا application/*+xml ارسال کنید.

وضوح تصویر

مطمئن شوید که ورودی ارسالی به سیاست Extract Variables معتبر و خالی نباشد.

برای رفع مشکل مربوط به مثال خط‌مشی Extract Variables که در بالا نشان داده شده است، یک payload معتبر XML ارسال کنید. برای مثال:

  1. یک فایل با نام city.xml با محتوای زیر ایجاد کنید:

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. فراخوانی API را با استفاده از دستور cURL به صورت زیر انجام دهید:

    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. عنصر <Source> را در فایل XML مربوط به Extract Variables بررسی کنید و نوع ورودی که متغیرها از آن استخراج می‌شوند را تعیین کنید. برای مثال، سیاست Extract Variables زیر عنصر <Source> را روی request تنظیم کرده و متغیرها را از JSON payload استخراج می‌کند:

    <?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" ]]'
    

    بار داده JSON ارسالی به API نامعتبر است زیرا شامل آرایه‌ای با براکت‌های مربعی ( [ ] ) است، بنابراین کد خطا دریافت می‌کنید:

    steps.extractvariables.ExecutionFailed
    

    این خطا همچنین می‌تواند در صورتی رخ دهد که عنصر <Source> روی response تنظیم شده باشد اما payload پاسخ JSON نامعتبر یا ناقص باشد.

وضوح تصویر

مطمئن شوید که ورودی ارسالی به سیاست Extract Variables معتبر است و ناقص نیست.

برای رفع مشکل مربوط به مثال مربوط به سیاست Extract Variables که در بالا مورد بحث قرار گرفت، یک درخواست payload معتبر 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. سیاست Extract Variables را در جایی که می‌خواهید مقدار را روی متغیری از نوع تعیین‌شده در مرحله ۱ تنظیم کنید، شناسایی کنید.

    برای مثال، سیاست Extract Variables زیر، مقدار را از JSONPath $.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. بررسی کنید که آیا نوع داده تعیین‌شده در مرحله ۳ و نوع داده متغیری که داده‌ها به آن اختصاص داده می‌شوند (که در مرحله ۲ تعیین شده‌اند) یکسان هستند یا خیر.

  5. اگر نوع داده متغیرهای منبع و مقصد یکسان نباشد، دلیل خطا همین است.

    در مثال مربوط به سیاست Extract Variables که در بالا نشان داده شده است، در نظر بگیرید که درخواست JSON به صورت زیر است:

    {
     "latitude":36.2312
    }
    

    نوع داده مقداری که از <JSONPath> ، '$.latitude' ، استخراج می‌شود، یک عدد صحیح (Integer) است که به متغیری از نوع داده boolean اختصاص داده شده است.

    از آنجایی که نوع داده‌ی مقدار استخراج‌شده و نوع داده‌ی متغیری که مقدار به آن اختصاص داده شده است، یکسان نیستند، کد خطای steps.extractvariables.UnableToCast را دریافت می‌کنید.

وضوح تصویر

اطمینان حاصل کنید که نوع داده‌ی مقدار استخراج‌شده و متغیری که محتوا به آن اختصاص داده می‌شود، از یک نوع باشند.

برای اصلاح سیاست استخراج متغیرها در مثال، باید نوع متغیر را به عدد صحیح (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>

خطای تجزیه مسیر Json

کد خطا

steps.extractvariables.JsonPathParsingFailure

متن پاسخ خطا

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

علت

این خطا زمانی رخ می‌دهد که سیاست Extract Variables قادر به تجزیه یک مسیر JSON و استخراج داده‌ها از متغیر جریان مشخص شده در عنصر <Source> نباشد. معمولاً این اتفاق زمانی می‌افتد که متغیر جریان مشخص شده در عنصر <Source> در جریان فعلی وجود نداشته باشد.

برای مثال، این خطا زمانی رخ می‌دهد که سیاست Extract Variables در جریان پاسخ اجرا شود و انتظار می‌رود یک مسیر JSON را تجزیه کند، اما عنصر <Source> متغیر جریان request.content را مشخص می‌کند که در جریان پاسخ وجود ندارد.

تشخیص

  1. سیاست Extract Variables را که خطا در آن رخ داده است و نام متغیر جریانی که داده‌ها نمی‌توانند از آن استخراج شوند را شناسایی کنید. می‌توانید هر دوی این موارد را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام سیاست ExtractVariables-1 و متغیر request.content است:

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

  2. در XML مربوط به سیاست Extract Variables که با شکست مواجه شده است، بررسی کنید که نام متغیر تنظیم شده در عنصر <Source> با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت داشته باشد. برای مثال، سیاست Extract Variables زیر متغیری به نام request.content را مشخص می‌کند که با آنچه در رشته خطا است مطابقت دارد:

    <?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 در عنصر <Source> از خط‌مشی Extract Variables استفاده می‌شود. متغیر جریان request.content فقط در جریان درخواست موجود است.

    از آنجایی که متغیر response در جریان درخواست وجود ندارد، کد خطای steps.extractvariables.JsonPathParsingFailure را دریافت می‌کنید.

وضوح تصویر

مطمئن شوید که متغیر جریان استفاده شده در عنصر <Source> از سیاست Extract Variables در جریانی که سیاست Extract Variables در آن اجرا می‌شود، موجود باشد.

برای مثال، فرض کنید متغیری به نام 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>