عیب‌یابی خطای زمان اجرای «استخراج متغیرها»

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

SourceMessageNotAvailable

کد خطا

steps.extractvariables.SourceMessageNotAvailable

متن پاسخ خطا

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

علت

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

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

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

تشخیص

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

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

  2. در فایل XML خطامند خط‌مشی «استخراج متغیرها»، بررسی کنید که نام متغیر تنظیم‌شده در عنصر با نام متغیر شناسایی‌شده در رشته خطا مطابقت داشته باشد (مرحله ۱ در بالا). برای مثال، خط‌مشی «استخراج متغیرها» زیر متغیری را به‌نام response در عنصر مشخص می‌کند که با آنچه در رشته خطا است مطابقت دارد:

    <ExtractVariables name="ExtractVariables-1">
        <Source>response</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. تعیین کنید که آیا متغیر استفاده‌شده در عنصر <Source> در جریانی که خط‌مشی «استخراج متغیرها» در آن اجرا می‌شود تعریف و دردسترس است یا نه.

  4. اگر متغیر یکی از این موارد باشد:

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

    در این صورت، این دلیل خطا است.

    به‌عنوان مثال، فرض کنید خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است در جریان درخواست اجرا می‌شود. به‌یاد داشته باشید که متغیر response در عنصر <Source> خط‌مشی «استخراج متغیرها» استفاده می‌شود. متغیر response فقط در جریان پاسخ دردسترس است.

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

وضوح

مطمئن شوید مجموعه متغیر در عنصر <Source> خط‌مشی «استخراج متغیرها» که ناموفق بوده است تعریف شده باشد و در جریانی که خط‌مشی اجرا می‌شود وجود داشته باشد.

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

<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"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که خط‌مشی «استخراج متغیرها» نتواند مقدار را روی متغیری تنظیم کند. این خطا معمولاً زمانی رخ می‌دهد که سعی کنید مقادیر را به چندین متغیر اختصاص دهید که نام آن‌ها با کلمات یکسانی در قالب نقطه‌ای تو در تو شروع می‌شود.

برای مثال، فرض کنیم مقداری را برای متغیر var.color ایجاد/اختصاص می‌دهید. در این مورد، color به‌عنوان گره شیء اختصاص داده می‌شود. اگر سپس سعی کنید مقداری را به متغیر دیگری var.color.next اختصاص دهید، این کار انجام نخواهد شد زیرا color قبلاً اختصاص داده شده است و اختصاص متغیر دیگری به آن مجاز نیست.

تشخیص

  1. خط‌مشی «استخراج متغیرها» را که خطا در آن رخ داده است و نام متغیری را که مقدار آن تنظیم نشده است شناسایی کنید. هر دوی این موارد را می‌توانید در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در رشته خطای زیر، نام خط‌مشی ExtractColors و متغیر var.color.next است:

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

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

    در خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است، به موارد زیر توجه کنید:

    • مقدار پارامتر پُرسمان با نام color ابتدا به متغیر var.color اختصاص داده می‌شود(توجه: var پیشوند همه متغیرها است که در عنصر <VariablePrefix> تنظیم شده است)
    • در تکلیف بعدی، مقدار پارامتر پُرسمان nextcolor به متغیر دیگری var.color.next اختصاص داده می‌شود.
    • ازآنجایی‌که var.color قبلاً تخصیص داده شده است، خط‌مشی «استخراج متغیرها» نمی‌تواند متغیر تودرتوی دیگری 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>
    
    

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

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

InvalidJSONPath

کد خطا

steps.extractvariables.InvalidJSONPath

متن پاسخ خطا

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

علت

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

تشخیص

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

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

  2. در «زبان نشانه‌گذاری توسعه‌پذیر» خط‌مشی «استخراج متغیرها» ناموفق، تأیید کنید که مسیر JSON تنظیم‌شده در عنصر <JSONPath> با مسیر شناسایی‌شده در رشته خطا مطابقت داشته باشد (مرحله ۱ در بالا). برای مثال، خط‌مشی «استخراج متغیرها» زیر مسیر 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 تنظیم شده باشد، شیء پاسخ خواهد بود.

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

    <Source>response</Source>

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

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

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

    ازآنجایی‌که پایه‌بار پاسخ JSON شیء Name را ندارد، خط‌مشی «استخراج متغیرها» با خطایی که کد خطای steps.extractvariables.InvalidJSONPath را دریافت می‌کنید ناموفق است.

وضوح

  1. مطمئن شوید که فقط اشیایی که بخشی از «پایه‌بار JSON» هستند و متغیرها از آن‌ها استخراج می‌شوند در عنصر <JSONPath> خط‌مشی «استخراج متغیرها» مشخص شده باشند.

    برای اصلاح خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است، می‌توانید عنصر <JSONPath> را تغییر دهید تا یکی از اشیای موجود در «پایه‌بار» پاسخ JSON نمونه را مشخص کنید (برای مثال، اشیای 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>
    
    

ExecutionFailed

کد خطا

steps.extractvariables.ExecutionFailed

متن پاسخ خطا

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

علل احتمالی

دلایل احتمالی این خطا عبارت‌اند از:

علت شرح
پایه‌بار ورودی وجود ندارد پایه‌بار ورودی (JSON،‏ XML) خالی است.
ورودی نامعتبر یا قالب نادرست ورودی (JSON،‏ XML، و غیره) ارسال‌شده به خط‌مشی نامعتبر یا ناقص است.

دلیل: بار ورودی وجود ندارد

اگر خط‌مشی «استخراج متغیرها» قرار باشد متغیرها را از بار JSON یا XML استخراج کند، اما محتوای (بار) متغیر مشخص‌شده در عنصر <Source> خالی باشد، این خطا رخ می‌دهد.

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

تشخیص

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

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

  2. عنصر <Source> را در «استخراج متغیرها» ناموفق XML بررسی کنید و نوع ورودی‌ای را که متغیرها از آن استخراج می‌شوند تعیین کنید. برای مثال، خط‌مشی «استخراج متغیرها» زیر <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. بررسی کنید ورودی‌ای که خط‌مشی «استخراج متغیرها» آن را تجزیه می‌کند خالی باشد. اگر ورودی خالی باشد، دلیل خطا همین است.

    در خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است، بار پاسخ (یعنی بدنه پاسخ) که توسط سرور پشتیبان ارسال شده است خالی است.

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

    steps.extractvariables.ExecutionFailed

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

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

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

وضوح

مطمئن شوید ورودی ارسال‌شده به خط‌مشی «استخراج متغیرها» معتبر و غیرخالی باشد.

برای رفع مشکل خط‌مشی «استخراج متغیرها» در مثال بالا، پیام‌واره 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
    
    

علت: ورودی نامعتبر یا قالب نادرست

اگر خط‌مشی «استخراج متغیرها» ورودی نامعتبر یا بدشکل را تجزیه کند، این خطا را دریافت می‌کنید.

برای مثال، اگر JSON نامعتبر زیر به‌عنوان ورودی به خط‌مشی «استخراج متغیرها» ارائه شود، این خطا را دریافت خواهید کرد.

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

تشخیص

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

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

  2. عنصر <Source> را در «استخراج متغیرها» ناموفق XML بررسی کنید و نوع ورودی‌ای را که متغیرها از آن استخراج می‌شوند تعیین کنید. برای مثال، خط‌مشی «استخراج متغیرها» زیر عنصر <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. بررسی کنید ورودی‌ای که توسط خط‌مشی «استخراج متغیرها» تجزیه می‌شود معتبر باشد. اگر ورودی نامعتبر یا بدشکل باشد، دلیل خطا همین است.

    در خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است، JSON نامعتبر زیر به خط‌مشی «استخراج متغیرها» ارسال شده است

    [
        "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 تنظیم شده باشد اما بار پاسخ JSON نامعتبر یا قالب آن درست نباشد.

وضوح

مطمئن شوید ورودی ارسال‌شده به خط‌مشی «استخراج متغیرها» معتبر و بدون نقص باشد.

برای رفع مشکل خط‌مشی «استخراج متغیرها» که در بالا درباره آن بحث شد، درخواست پایه‌بار JSON معتبری را به‌صورت زیر ارسال کنید:

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

UnableToCast

کد خطا

steps.extractvariables.UnableToCast

متن پاسخ خطا

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

علت

اگر خط‌مشی «استخراج متغیرها» نتواند مقدار استخراج‌شده را به متغیر تبدیل کند، این خطا رخ می‌دهد. معمولاً این اتفاق زمانی می‌افتد که سعی کنید مقدار یک نوع داده را روی متغیری از نوع داده دیگر تنظیم کنید.

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

تشخیص

  1. نوع داده متغیری را که خط‌مشی «استخراج متغیرها» در تلاش است آن را تبدیل کند و موفق نمی‌شود شناسایی کنید. می‌توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نوع شیء BOOLEAN است:

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

  2. خط‌مشی «استخراج متغیرها» را که در آن سعی می‌کنید مقدار را روی متغیری از نوع تعیین‌شده در مرحله #۱ تنظیم کنید شناسایی کنید.

    برای مثال، خط‌مشی «استخراج متغیرها» زیر مقدار را از یک 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. نوع داده مقدار استخراج‌شده را بررسی کنید. داده‌ها ممکن است در قالب سرایندها، مسیرهای نشانی وب، بار داده‌های JSON/XML، پارامترهای فرم، و پارامترهای پُرسمان باشند.

  4. بررسی کنید که آیا نوع داده تعیین‌شده در مرحله #۳ و نوع داده متغیری که داده‌ها به آن اختصاص داده می‌شود (تعیین‌شده در مرحله #۲) یکسان هستند یا نه.

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

    در خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است، درنظر بگیرید که پایه‌بار درخواست JSON به‌صورت زیر است:

    {
     "latitude":36.2312
    }
    

    نوع داده مقداری که از <JSONPath> استخراج می‌شود، ‘$.latitude’، «عدد صحیح» است که به متغیری از نوع داده «منطقی» اختصاص داده می‌شود.

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

وضوح

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

برای اصلاح خط‌مشی «استخراج متغیرها»، باید نوع متغیر را به «عدد صحیح» تغییر دهید:

<?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 flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

علت

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

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

تشخیص

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

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

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

  4. اگر متغیر یکی از این موارد باشد:

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

    در این صورت، این دلیل خطا است.

    به‌عنوان مثال، فرض کنید خط‌مشی ExtractVariables که در بالا نشان داده شده است قرار است در جریان پاسخ اجرا شود. به‌یاد داشته باشید که متغیر جریان request.content در عنصر <Source> از خط‌مشی «استخراج متغیرها» استفاده می‌شود. متغیر جریان request.content فقط در جریان درخواست دردسترس است.

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

وضوح

مطمئن شوید متغیر جاری استفاده‌شده در عنصر <Source> خط‌مشی «استخراج متغیرها» در جریانی که خط‌مشی «استخراج متغیرها» در آن اجرا می‌شود دردسترس باشد.

برای مثال، فرض کنید متغیری به‌نام response.content در جریان پاسخ وجود دارد و درواقع حاوی JSON است که می‌خواهید استخراج کنید. برای اصلاح خط‌مشی «استخراج متغیرها» که در بالا نشان داده شده است، می‌توانید عنصر <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>