กำหนดค่าข้อผิดพลาดในการทำให้ใช้งานได้ไม่สำเร็จ

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

ลักษณะปัญหา

การทำให้พร็อกซี API หรือการแก้ไขโฟลว์ที่แชร์ใช้งานได้ผ่าน Edge UI หรือ API การจัดการล้มเหลวโดยมีข้อผิดพลาดการกำหนดค่าล้มเหลว

ข้อความแสดงข้อผิดพลาด

คุณจะได้รับข้อความแสดงข้อผิดพลาดใน Edge UI ตามที่แสดงด้านล่าง

The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}

ภาพหน้าจอของตัวอย่างข้อความแสดงข้อผิดพลาดที่พบใน Edge UI มีดังนี้

สาเหตุที่เป็นไปได้

การทำให้พร็อกซี API ใช้งานได้อาจล้มเหลวโดยมีข้อผิดพลาด "การกำหนดค่าล้มเหลว" เนื่องจากสาเหตุหลายประการ ตารางด้านล่างแสดงสาเหตุที่พบบ่อยซึ่งทำให้เกิดข้อผิดพลาดนี้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาสำหรับ
ไม่มี Java Class ใน Javaข้อความไฮไลต์ ไม่มีคลาส Java จากไฟล์ JAR ที่อ้างอิงโดยนโยบาย Javaต้องระบุ ผู้ใช้ Edge Private Cloud
การใช้ตัวถูกดำเนินการที่ไม่ถูกต้องในเงื่อนไขของโฟลว์เงื่อนไข ตัวถูกดำเนินการ/นิพจน์ที่ใช้ในโอเปอเรเตอร์ด้านใดด้านหนึ่งหรือทั้ง 2 ด้านในเงื่อนไขไม่ถูกต้อง
ชื่อโฮสต์ไม่ถูกต้องในนโยบายการบันทึกข้อความ ไม่สามารถแก้ไขชื่อโฮสต์ที่ใช้ในนโยบาย MessageLaging หรืออาจมีสัญลักษณ์พิเศษบางอย่างที่ไม่พึงประสงค์
ชื่อ KeyValueMap ไม่ถูกต้อง KeyValueMap ไม่ถูกต้องหรือว่างเปล่าในนโยบาย KeyValueMapOperatings ในพร็อกซี API

ขั้นตอนการวิเคราะห์ทั่วไป

  1. รับสถานะการทำให้ใช้งานได้สำหรับการแก้ไขเฉพาะสำหรับพร็อกซี API ที่คุณสังเกตเห็นข้อผิดพลาดในการทำให้ใช้งานได้โดยใช้ API ด้านล่าง:

    curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. ต่อไปนี้คือตัวอย่างเอาต์พุตจาก API ข้างต้น

    "server" : [ { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "0a20926c-f4bf-401b-af84-05fd84b9f492" 
    }, { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "f2ee6ab4-a108-4465-a7ba-b56530d8e3fc" 
    }, { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "0f41991e-b310-4e77-aac5-5fdb150ef9f6" 
    },
    
  3. คุณจะเห็นข้อความแสดงข้อผิดพลาด "การกำหนดค่าล้มเหลว" ในตัวประมวลผลข้อความแต่ละตัวในเอาต์พุตสถานะการทำให้ใช้งานได้

  4. ลงชื่อเข้าใช้เครื่องมือประมวลผลข้อความและตรวจสอบบันทึก /opt/apigee/var/log/edge-message-processor/logs/system.log ดูว่ามีข้อผิดพลาดในระหว่างการติดตั้งใช้งานพร็อกซี API หรือไม่

  5. คุณต้องทำตามขั้นตอนการแก้ปัญหาและวิธีแก้ไขปัญหาที่เหมาะสม ทั้งนี้ขึ้นอยู่กับข้อผิดพลาด/ข้อยกเว้นที่ปรากฏในบันทึกผู้ประมวลผลข้อความ

  6. ส่วนด้านล่างจะระบุข้อยกเว้นที่สังเกตเห็นบ่อยที่สุดบางรายการ ซึ่งทําให้เกิดข้อผิดพลาดในการติดตั้งใช้งาน "การกําหนดค่าล้มเหลว" และระบุขั้นตอนในการแก้ปัญหาและแก้ไขปัญหาดังกล่าว

สาเหตุ: ไม่มีคลาส Java ในนโยบาย JavaScriptที่แตกต่างกัน

การวินิจฉัย

  1. ในบันทึกตัวประมวลผลข้อความ หากคุณเห็นข้อยกเว้นที่มีข้อความ "ไม่สามารถสร้างอินสแตนซ์ JavaScript Class" ในระหว่างการติดตั้งใช้งานพร็อกซี API (DeployEvent) ดังที่แสดงด้านล่าง ให้ไปยังขั้นตอนที่ 2 หากไม่ ให้ไปที่ตัวถูกดำเนินการที่ไม่ถูกต้องที่ใช้ในเงื่อนไขของโฟลว์เงื่อนไข
  2. ตัวประมวลผลข้อความจะแสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้พร็อกซี API ใช้งานได้

    2017-10-10 05:02:42,330 Apigee-Main-5 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='oauth2', applicationRevision='14', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class com.something.apigee.callout.crypto.main.SecretCallout 
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:89) ~[javacallout-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:230) ~[message-processor-1.0.0.jar:na] 
    …
    <snipped>
    
  3. ข้อความแสดงข้อผิดพลาดในข้อยกเว้นข้างต้นระบุว่าไม่สามารถสร้างอินสแตนซ์คลาส JavaScript com.something.apigee.callout.crypto.main.SecretCallout ได้ ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อไม่มีคลาสที่ระบุในไฟล์ JAR ที่ระบุในนโยบาย JavaScript หรือไฟล์ JAR ใดๆ ที่เกี่ยวข้อง

  4. ตรวจสอบไฟล์ JAR ที่มีคลาสทั้งหมดที่เกี่ยวข้องกับแพ็กเกจ com.something.apigee.callout.crypto.main และยืนยันว่าคลาส com.something.apigee.callout.crypto.main.SecretCallout ที่ระบุขาดหายไป

ความละเอียด

  1. เพิ่มคลาสที่ขาดหายไปลงในไฟล์ JAR ที่ระบุและอัปโหลดไฟล์ JAR
  2. ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
  3. ในตัวอย่างข้างต้น เราได้แก้ไขปัญหาดังนี้
    1. กำลังเพิ่มคลาส com.something.apigee.callout.crypto.main.SecretCallout ที่ขาดหายไปลงในไฟล์ JAR
    2. อัปโหลดไฟล์ JAR ที่อัปเดตแล้วและทำให้พร็อกซี API ใช้งานได้อีกครั้ง

สาเหตุ: ตัวถูกดำเนินการที่ใช้กับโอเปอเรเตอร์ในโฟลว์เงื่อนไขไม่ถูกต้อง

การวินิจฉัย

  1. ในบันทึกตัวประมวลผลข้อความ ถ้าคุณเห็น com.apigee.expressions.parser.ParseException ระหว่างการติดตั้งใช้งานพร็อกซี API หรือโฟลว์ที่แชร์ ดังที่แสดงในข้อความตัวอย่างด้านล่าง ให้ดำเนินการต่อในขั้นตอนที่ 2 หากไม่พบ ให้ไปที่สาเหตุถัดไปชื่อโฮสต์ไม่ถูกต้องในนโยบายการบันทึกข้อความ

    ตัวอย่างข้อความแสดงข้อผิดพลาด

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    
  2. มาดูตัวอย่างเพื่อให้เข้าใจวิธีวิเคราะห์ปัญหานี้กัน

    ตัวอย่าง : ตัวดำเนินการสำหรับนิพจน์ <Operator> ควรเป็นนิพจน์ข้อมูล

  3. ตัวประมวลผลข้อความจะแสดงข้อยกเว้นต่อไปนี้ในระหว่างการติดตั้งใช้งานโฟลว์ที่แชร์

    2017-11-23 09:11:04,498  Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.loadXMLConfigurations() : Unable to Load default for path /organizations/myorg/apiproxies/Introspection/revisions/12/sharedflows/default
    2017-11-23 09:11:04,499  Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() :  sync error for Introspection and revision 12
    2017-11-23 09:11:04,499  Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() :  Actual Error
    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
        at com.apigee.expressions.parser.ExpressionParser.buildExpressionTree(ExpressionParser.java:337) ~[expressions-1.0.0.jar:na]
        at com.apigee.expressions.parser.ExpressionParser.parse(ExpressionParser.java:24) ~[expressions-1.0.0.jar:na]
        at com.apigee.expressions.parser.ExpressionParser.parseLogicExpression(ExpressionParser.java:28) ~[expressions-1.0.0.jar:na]
        at com.apigee.messaging.runtime.Step.getExpression(Step.java:67) ~[message-processor-1.0.0.jar:na]
        at com.apigee.messaging.runtime.Step.handleAdd(Step.java:58) ~[message-processor-1.0.0.jar:na]
        at com.apigee.messaging.runtime.SharedFlowRuntime.addStep(SharedFlowRuntime.java:81) ~[message-processor-1.0.0.jar:na] … <snipped>
    
  4. ข้อความแสดงข้อผิดพลาดใน ParseException - "Both the operands for EQUALS expression should be data expressions" ระบุว่าเงื่อนไขที่เกี่ยวข้องกับ เท่ากับ (=) ไม่เท่ากับ (!=) หรือสถิติที่มีโอเปอเรเตอร์ (=|) มีปัญหา

  5. ดูเงื่อนไขในโฟลว์เงื่อนไขทั้งหมดที่เกี่ยวข้องกับโอเปอเรเตอร์เฉพาะที่กล่าวถึงในข้อความแสดงข้อผิดพลาด และดูว่ามีปัญหาใดๆ ต่อไปนี้หรือไม่

    1. นิพจน์ด้านใดด้านหนึ่งของโอเปอเรเตอร์เป็นประเภทเดียวกัน เช่น หากคุณมีตัวแปรสตริงทางด้านซ้ายของโอเปอเรเตอร์ คุณต้องมีตัวแปรสตริงหรือค่าสตริงอื่นทางด้านขวา
    2. โอเปอเรเตอร์จะใช้ตัวแปรที่ถูกต้อง
    3. มีช่องว่างระหว่างโอเปอเรเตอร์และแต่ละนิพจน์

  6. หากไม่เป็นไปตามเกณฑ์ข้อใดข้อหนึ่งข้างต้น คุณจะได้รับ ParseException - "Both the operands for EQUALS expression should be data expressions"

  7. เรามาดูตัวอย่างเพื่อให้เข้าใจปัญหานี้กัน ต่อไปนี้คือตัวอย่างเงื่อนไขข้อผิดพลาด

    <Condition>
               (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved")
    </Condition>
    
  8. ในตัวอย่างนี้ คุณจะสังเกตเห็นว่าไม่มีช่องว่างระหว่างโอเปอเรเตอร์ "or" ตามด้วยเงื่อนไขถัดไป ดังนั้นเมื่อมีการแยกวิเคราะห์เงื่อนไขที่ 2 นิพจน์แรกจะถูกใช้เป็น "or(fault.name" สำหรับโอเปอเรเตอร์ EQUALS ชื่อนี้ไม่ใช่ชื่อตัวแปรที่ถูกต้อง จึงไม่ถือเป็นนิพจน์ข้อมูลที่ถูกต้อง ผลที่ตามมาคือคุณจะได้รับข้อยกเว้นนี้

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    

ความละเอียด

  1. ตรวจสอบให้แน่ใจว่าคุณมีนิพจน์ข้อมูลที่เหมาะสมอยู่เสมอในด้านใดด้านหนึ่งของโอเปอเรเตอร์
  2. ในตัวอย่างที่กล่าวถึงข้างต้น วิธีแก้ไขคือมีช่องว่างหลังโอเปอเรเตอร์ "หรือ" ตามที่อธิบายไว้ในข้อมูลโค้ด

    <Condition>
               (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved")
    </Condition>
    
    

ชื่อโฮสต์ไม่ถูกต้องในนโยบาย MessageLoking

การวินิจฉัย

  1. ในบันทึกตัวประมวลผลข้อความ หากคุณเห็นข้อยกเว้นที่มีข้อความ "HostName ไม่ถูกต้อง" ระหว่างการติดตั้งใช้งานพร็อกซี API หรือโฟลว์ที่แชร์ดังที่แสดงด้านล่าง ให้ดำเนินการต่อในขั้นตอนที่ 2 หากไม่ ให้ไปที่สาเหตุถัดไป ชื่อ KeyValueMap ไม่ถูกต้อง

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. โปรดดู 2 ตัวอย่างด้านล่างเพื่อให้เข้าใจวิธีแก้ปัญหาและแก้ไขปัญหานี้

ตัวอย่างที่ 1: HostName มีอักขระพิเศษที่ไม่ต้องการ

  1. ตัวประมวลผลข้อความจะแสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้พร็อกซี API ใช้งานได้

      2018-01-20 02:12:13,535 Apigee-Main-3 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='providersearch', applicationRevision='4', deploymentSpec=basepath=/;env=prod;, deploymentID=null}] 
      com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler 
      at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] 
      at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na]
      at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] 
      ...<snipped>
    
  2. ข้อยกเว้นข้างต้นแสดงให้เห็นว่าการทำให้ใช้งานได้ล้มเหลวเนื่องจาก "ชื่อโฮสต์ไม่ถูกต้อง '<ชื่อโฮสต์>' สำหรับเครื่องจัดการ Syslog" ซึ่งแสดงว่า HostName ที่ใช้ในนโยบาย MessageLogging เป็นชื่อโฮสต์ที่ไม่ถูกต้อง

  3. การตรวจสอบข้อยกเว้นในบันทึกตัวประมวลผลข้อความจะแสดงอย่างละเอียดว่าพบอักขระพิเศษที่ไม่ต้องการ "/" ที่ส่วนท้ายของ HostName 'splunkprod.myorg.com/'.

  4. อักขระพิเศษที่ไม่พึงประสงค์นี้คือสาเหตุของข้อผิดพลาดในการทำให้ใช้งานได้

ความละเอียด

  1. แก้ไขนโยบาย MessageLaging เพื่อนำสัญลักษณ์พิเศษที่ไม่ต้องการออกเพื่อแก้ไขปัญหา
  2. ในตัวอย่างข้างต้น เราได้นำสัญลักษณ์พิเศษ "/" ออกจากนโยบาย MessageLogging วิธีนี้แก้ปัญหาได้แล้ว

ตัวอย่างที่ 2: ชื่อโฮสต์แก้ไขไม่ได้

  1. บันทึกของตัวประมวลผลข้อความมีข้อความ 2-3 บรรทัดที่ระบุว่าเหตุการณ์การติดตั้งใช้งานสำหรับพร็อกซี API ถูกเรียก ตามด้วยข้อยกเว้นที่เกิดขึ้นระหว่างการติดตั้งใช้งานพร็อกซี API

    2017-12-22 00:13:49,057 Apigee-Main-87446 INFO MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : configuring [DeployEvent{organization='myorg', application='myapi', applicationRevision='42', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 
    
    2017-12-22 00:13:49,318 Apigee-Main-87446 ERROR c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.refresh() : Unable to resolve host : input-prd.cloud.splunk.com: Name or service not known 
    
    2017-12-22 00:13:49,323 Apigee-Main-87446 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {} 
    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'input-prd.cloud.splunk.com' for Syslog handler 
    at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.populateDestinations(MessageLoggingStepDefinition.java:118) ~[message-logging-1.0.0.jar:na] 
    at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.handleAdd(MessageLoggingStepDefinition.java:99) ~[message-logging-1.0.0.jar:na] 
    …
    <snipped> 
    
  2. ข้อยกเว้นข้างต้นแสดงให้เห็นว่าการทำให้ใช้งานได้ล้มเหลวเนื่องจาก "ชื่อโฮสต์ไม่ถูกต้อง '<ชื่อโฮสต์>' สำหรับเครื่องจัดการ Syslog"

  3. หากคุณอ่านบรรทัดข้างบนข้อยกเว้น พบว่าเครื่องมือประมวลผลข้อความแก้ไขชื่อโฮสต์ 'input-prd.cloud.splunk.com' ที่ระบุไว้ในนโยบาย MessageLadding ไม่ได้

  4. เพื่อยืนยันสิ่งนี้ คุณสามารถลอง Telnet ไปยังชื่อโฮสต์และพอร์ต # ที่ใช้ในนโยบายการบันทึกข้อความ

    1. ตรวจสอบนโยบาย MessageLogging ในการแก้ไขพร็อกซี API ที่เฉพาะเจาะจง และยืนยันชื่อโฮสต์และหมายเลขพอร์ตที่ใช้ ในตัวอย่างข้างต้น ชื่อพร็อกซี API: myapi, edit: 42

      นโยบายการบันทึกข้อมูลข้อความ

        <MessageLogging async="false" continueOnError="false" enabled="true" name="Log-To-Splunk">
            <DisplayName>Log-To-Splunk</DisplayName>
            <Syslog>
                <Message>Message.id = {request.header.id}</Message>
                <Host>input-prd.cloud.splunk.com</Host>
                <Port>2900</Port>
                <Protocol>TCP</Protocol>
                <SSLInfo>
                    <Enabled>true</Enabled>
                </SSLInfo>
            </Syslog>
        </MessageLogging>
      
    2. Telnet ไปยังโฮสต์ที่มีพอร์ตเฉพาะ สำหรับตัวอย่างนี้ เราได้ลองใช้ Telnet แล้ว และได้รับข้อผิดพลาดเดียวกันกับที่เห็นในบันทึกของผู้ประมวลผลข้อความ:

      telnet input-prd.cloud.splunk.com 2900 
      telnet: input-prd.cloud.splunk.com: Name or service not known 
      input-prd.cloud.splunk.com: Host name lookup failure
      
  5. ซึ่งพิสูจน์ให้เห็นแล้วว่าชื่อโฮสต์นั้นแก้ไขไม่ได้

ความละเอียด

  1. แก้ไขนโยบาย MessageLoking เพื่อใช้ชื่อโฮสต์ที่ถูกต้อง

หากยังคงพบปัญหาอยู่ ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย

สาเหตุ: ชื่อ KeyValueMap ไม่ถูกต้อง

การวินิจฉัย

  1. ในบันทึกตัวประมวลผลข้อความ หากคุณเห็นข้อยกเว้นที่มีข้อความ "ชื่อ KeyValueMap ไม่ถูกต้อง" ระหว่างการใช้งานพร็อกซี API หรือโฟลว์ที่แชร์ดังที่แสดงด้านล่าง ให้ดำเนินการขั้นตอนที่ 2 หากไม่มี ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. มาดูตัวอย่างเพื่อให้เข้าใจวิธีแก้ปัญหาและปัญหานี้กัน

  3. ตัวอย่างบันทึกตัวประมวลผลข้อความที่แสดงข้อยกเว้นที่มีข้อความ "ชื่อ KeyValueMap ไม่ถูกต้อง" ทำให้เกิดข้อผิดพลาดระหว่างการทำให้พร็อกซี API ใช้งานได้

    2018-02-27 14:14:50,318  Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {}
    com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name  is invalid
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) [config-entities-1.0.0.jar:na]
            at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) [message-processor-1.0.0.jar:na]
    
    2018-02-27 14:14:50,344  Apigee-Main-6 ERROR BOOTSTRAP - RuntimeConfigurationServiceImpl.dispatchToListeners() : RuntimeConfigurationServiceImpl.dispatchToListeners : Error occurred while dispatching the request DeployEvent{organization='myorg', application='CustomerAPI', applicationRevision='1', deploymentSpec=basepath=/;env=test;, deploymentID=null} to com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener@5009d06e
    com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name  is invalid
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) ~[config-entities-1.0.0.jar:na]
            at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) ~[message-processor-1.0.0.jar:na]
    
  4. ข้อยกเว้นที่สองข้างต้นระบุว่าเกิดข้อผิดพลาดในการติดตั้งใช้งานสำหรับพร็อกซี API: CustomerAPI การแก้ไข: 1.

  5. เมื่อตรวจสอบสแต็กเทรซ คุณจะสังเกตเห็นว่ามีข้อผิดพลาดเกิดขึ้นขณะดำเนินการตามนโยบาย KeyValuMapOperatings

  6. เมื่อตรวจสอบกลุ่มพร็อกซี API คุณจะพบว่ามีนโยบาย KeyValuMapEnforcements 1 รายการซึ่งมีโค้ดดังที่แสดงด้านล่าง

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="">
     <DisplayName>Pulling Keys</DisplayName>
     <Properties/>
     <ExclusiveCache>false</ExclusiveCache>
    
    
  7. ดังที่เห็นด้านบน mapIdentifier ซึ่งแสดงชื่อของ KeyValueMap มีสตริงว่าง ชื่อ KeyValueMap ต้องไม่ว่างเปล่า ซึ่งเป็นสาเหตุของข้อผิดพลาดในการทำให้ใช้งานได้

ความละเอียด

  1. แก้ไขนโยบาย KeyValueMapOperatings ให้มีชื่อที่ถูกต้องสำหรับ KeyValueMap
  2. ในตัวอย่างข้างต้น เราแก้ไขปัญหาด้วยการแก้ไข KeyValueMapEnforcements ให้มีชื่อ KeyValueMap เป็น "MyKeyValueMap" ตามที่แสดงด้านล่าง

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="MyKeyValueMap">
        <DisplayName>Pulling Keys</DisplayName>
        <Properties/>
        <ExclusiveCache>false</ExclusiveCache>
    

ต้องรวบรวมข้อมูลการวินิจฉัย

หากปัญหายังคงอยู่แม้ว่าจะทำตามคำแนะนำข้างต้นแล้ว โปรดรวบรวมข้อมูลการวินิจฉัยต่อไปนี้ โปรดติดต่อฝ่ายสนับสนุนของ Apigee Edge และแจ้งข้อมูลที่รวบรวมได้

  1. เอาต์พุตของคำสั่ง

    curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. บันทึกตัวประมวลผลข้อความ

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    
  3. รายละเอียดว่ามีการลองใช้ส่วนต่างๆ ใดใน Playbook นี้และข้อมูลเชิงลึกอื่นๆ ที่จะช่วยให้เราจัดการกับปัญหานี้ได้อย่างรวดเร็ว