คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
การทำให้ใช้งานได้ของการแก้ไขพร็อกซี API หรือ Shared Flow ผ่าน UI ของ Edge หรือ Management API ไม่สำเร็จโดยมีข้อผิดพลาด Configuration failed
ข้อความแสดงข้อผิดพลาด
คุณจะได้รับข้อความแสดงข้อผิดพลาดใน UI ของ Edge ดังที่แสดงด้านล่าง
The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}
นี่คือภาพหน้าจอของข้อความแสดงข้อผิดพลาดตัวอย่างที่พบใน UI ของ Edge

สาเหตุที่เป็นไปได้
การทำให้ใช้งานได้ของพร็อกซี API อาจไม่สำเร็จโดยมีข้อผิดพลาด "Configuration failed" เนื่องจากสาเหตุต่างๆ มากมาย ตารางด้านล่างแสดงสาเหตุที่พบบ่อยบางประการที่ทำให้เกิดข้อผิดพลาดนี้
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
| ไม่มีคลาส Java ในนโยบาย JavaCallout | ไม่มีคลาส Java ในไฟล์ JAR ที่นโยบาย JavaCallout อ้างอิง | ผู้ใช้ Edge Private Cloud |
| ใช้ตัวถูกดำเนินการไม่ถูกต้องในเงื่อนไขใน Condition Flow | ตัวถูกดำเนินการ/นิพจน์ที่ใช้ในโอเปอเรเตอร์ทั้ง 2 ด้านในเงื่อนไขไม่ถูกต้อง | |
| ชื่อโฮสต์ไม่ถูกต้องในนโยบาย Message Logging | ระบบแก้ไขชื่อโฮสต์ที่ใช้ในนโยบาย MessageLogging ไม่ได้ หรือชื่อโฮสต์อาจมีสัญลักษณ์พิเศษที่ไม่ต้องการ | |
| ชื่อ KeyValueMap ไม่ถูกต้อง | KeyValueMap ไม่ถูกต้องหรือว่างเปล่าในนโยบาย KeyValueMapOperations ในพร็อกซี API |
ขั้นตอนการวินิจฉัยที่พบบ่อย
รับสถานะการทำให้ใช้งานได้สำหรับการแก้ไขที่เฉพาะเจาะจงของพร็อกซี API ที่คุณพบข้อผิดพลาดในการทำให้ใช้งานได้โดยใช้ API ด้านล่าง
curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>นี่คือตัวอย่างเอาต์พุตจาก 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" },คุณจะเห็นข้อความแสดงข้อผิดพลาด "Configuration failed" ใน Message Processor แต่ละรายการในเอาต์พุตสถานะการทำให้ใช้งานได้
เข้าสู่ระบบ Message Processor อย่างน้อย 1 รายการ แล้วตรวจสอบบันทึก
/opt/apigee/var/log/edge-message-processor/logs/system.logดูว่ามีข้อผิดพลาดเกิดขึ้นระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือไม่คุณต้องทำตามขั้นตอนการแก้ปัญหาและการแก้ปัญหาที่เหมาะสมสำหรับปัญหาที่พบในบันทึกของ Message Processor
ส่วนด้านล่างนี้แสดงข้อยกเว้นที่พบบ่อยที่สุดบางรายการที่ทำให้เกิดข้อผิดพลาดในการทำให้ใช้งานได้ "Configuration failed" และแสดงขั้นตอนในการแก้ปัญหาและแก้ไขข้อยกเว้นเหล่านั้น
สาเหตุ: ไม่มีคลาส Java ในนโยบาย JavaCallout
การวินิจฉัย
- ในบันทึกของ Message Processor หากคุณเห็นข้อยกเว้นที่มีข้อความ "Failed to instantiate the JavaCallout Class" ระหว่างการทำให้ใช้งานได้ของพร็อกซี API (DeployEvent) ดังที่แสดงด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่ ใช้ตัวถูกดำเนินการไม่ถูกต้องในเงื่อนไขใน Condition Flow
Message Processor แสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้ใช้งานได้ของพร็อกซี 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>ข้อความแสดงข้อผิดพลาดในข้อยกเว้นด้านบนระบุว่าระบบสร้างอินสแตนซ์ของคลาส JavaCallout
com.something.apigee.callout.crypto.main.SecretCalloutไม่ได้ ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคลาสที่เฉพาะเจาะจงไม่พร้อมใช้งานในไฟล์ JAR ที่ระบุไว้ในนโยบาย JavaCallout หรือไฟล์ JAR ที่ขึ้นอยู่กับไฟล์นั้นตรวจสอบไฟล์ JAR ที่มีคลาสทั้งหมดที่เกี่ยวข้องกับแพ็กเกจ
com.something.apigee.callout.crypto.mainและยืนยันว่าไม่มีคลาสที่เฉพาะเจาะจงcom.something.apigee.callout.crypto.main.SecretCallout
ความละเอียด
- เพิ่มคลาสที่ขาดหายไปลงในไฟล์ JAR ที่เฉพาะเจาะจง แล้วอัปโหลดไฟล์ JAR
- ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
- ในตัวอย่างด้านบน เราแก้ปัญหาโดยทำดังนี้
- เพิ่มคลาสที่ขาดหายไป
com.something.apigee.callout.crypto.main.SecretCalloutลงในไฟล์ JAR - อัปโหลดไฟล์ JAR ที่อัปเดตแล้วและทำให้พร็อกซี API ใช้งานได้อีกครั้ง
- เพิ่มคลาสที่ขาดหายไป
สาเหตุ: ใช้ตัวถูกดำเนินการไม่ถูกต้องกับโอเปอเรเตอร์ใน Condition Flow
การวินิจฉัย
ในบันทึกของ Message Processor หากคุณเห็น
com.apigee.expressions.parser.ParseExceptionระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือ Shared Flow ดังที่แสดงในข้อความตัวอย่างด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่สาเหตุถัดไป ชื่อโฮสต์ไม่ถูกต้องในนโยบาย Message Loggingข้อความแสดงข้อผิดพลาดตัวอย่าง
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressionsมาดูตัวอย่างเพื่อทำความเข้าใจวิธีวินิจฉัยปัญหานี้
ตัวอย่าง : ตัวถูกดำเนินการสำหรับนิพจน์ <Operator> ควรเป็นนิพจน์ข้อมูล
Message Processor แสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้ใช้งานได้ของ Shared Flow
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>ข้อความแสดงข้อผิดพลาดใน ParseException - "
Both the operands for EQUALS expression should be data expressions" ระบุว่าเงื่อนไขที่เกี่ยวข้องกับโอเปอเรเตอร์เท่ากับ (=), ไม่เท่ากับ (!=) หรือ Stats with (=|) มีปัญหาดูเงื่อนไขใน Condition Flow ทั้งหมดที่เกี่ยวข้องกับโอเปอเรเตอร์ที่เฉพาะเจาะจงซึ่งระบุไว้ในข้อความแสดงข้อผิดพลาด และดูว่ามีปัญหาต่อไปนี้หรือไม่
- นิพจน์ทั้ง 2 ด้านของโอเปอเรเตอร์มีประเภทเดียวกัน ตัวอย่างเช่น หากคุณมีตัวแปรสตริงทางด้านซ้ายของโอเปอเรเตอร์ คุณต้องมีตัวแปรสตริงหรือค่าสตริงอีกตัวทางด้านขวา
- ใช้ตัวแปรที่ถูกต้องระหว่างโอเปอเรเตอร์
- มีช่องว่างระหว่างโอเปอเรเตอร์กับนิพจน์แต่ละรายการ
หากไม่เป็นไปตามเกณฑ์ที่กล่าวถึงข้างต้น คุณจะได้รับ ParseException - "
Both the operands for EQUALS expression should be data expressions"มาดูตัวอย่างเพื่อทำความเข้าใจปัญหานี้ นี่คือเงื่อนไขข้อผิดพลาดตัวอย่าง
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>ในตัวอย่างนี้ คุณจะเห็นว่าไม่มีช่องว่างระหว่างโอเปอเรเตอร์ "or" กับเงื่อนไขถัดไป ดังนั้นเมื่อมีการแยกวิเคราะห์เงื่อนไขที่ 2 ระบบจะใช้ตัวแปรแรกเป็น "or(fault.name" สำหรับโอเปอเรเตอร์ EQUALS ซึ่งไม่ใช่ชื่อตัวแปรที่ถูกต้อง ระบบจึงไม่ถือว่าเป็นนิพจน์ข้อมูลที่ถูกต้อง ด้วยเหตุนี้ คุณจึงได้รับข้อยกเว้นนี้
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
ความละเอียด
- ตรวจสอบว่าคุณมีนิพจน์ข้อมูลที่เหมาะสมทั้ง 2 ด้านของโอเปอเรเตอร์เสมอ
ในตัวอย่างที่กล่าวถึงข้างต้น วิธีแก้ปัญหาคือตรวจสอบว่ามีช่องว่างหลังโอเปอเรเตอร์ "or" ตามที่อธิบายไว้ในข้อมูลโค้ด
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
ชื่อโฮสต์ไม่ถูกต้องในนโยบาย MessageLogging
การวินิจฉัย
ในบันทึกของ Message Processor หากคุณเห็นข้อยกเว้นที่มีข้อความ "Invalid HostName" ระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือ Shared Flow ดังที่แสดงด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่สาเหตุถัดไป ชื่อ KeyValueMap ไม่ถูกต้อง
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerมาดูตัวอย่าง 2 ตัวอย่างด้านล่างเพื่อทำความเข้าใจวิธีแก้ปัญหาและแก้ไขปัญหานี้
ตัวอย่างที่ 1: ชื่อโฮสต์มีสัญลักษณ์พิเศษที่ไม่ต้องการ
Message Processor แสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้ใช้งานได้ของพร็อกซี 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>ข้อยกเว้นด้านบนแสดงว่าการทำให้ใช้งานได้ไม่สำเร็จเนื่องจาก "Invalid HostName '<hostname>' for Syslog handler" ซึ่งบ่งชี้ว่าชื่อโฮสต์ที่ใช้ในนโยบาย MessageLogging เป็นชื่อโฮสต์ที่ไม่ถูกต้อง
การตรวจสอบข้อยกเว้นในบันทึกของ Message Processor อย่างละเอียดแสดงให้เห็นว่ามีสัญลักษณ์พิเศษ "/" ที่ไม่ต้องการอยู่ที่ส่วนท้ายของชื่อโฮสต์
'splunkprod.myorg.com/'.สัญลักษณ์พิเศษที่ไม่ต้องการนี้เป็นสาเหตุของข้อผิดพลาดในการทำให้ใช้งานได้
ความละเอียด
- แก้ไขนโยบาย MessageLogging เพื่อนำสัญลักษณ์พิเศษที่ไม่ต้องการออกเพื่อแก้ปัญหา
- ในตัวอย่างด้านบน เรานำสัญลักษณ์พิเศษ "/" ออกจากนโยบาย MessageLogging ซึ่งเป็นการแก้ปัญหา
ตัวอย่างที่ 2: ชื่อโฮสต์ที่แก้ไขไม่ได้
บันทึกของ Message Processor มี 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>ข้อยกเว้นด้านบนแสดงว่าการทำให้ใช้งานได้ไม่สำเร็จเนื่องจาก "Invalid HostName '<hostname>' for Syslog handler"
หากอ่านบรรทัดเหนือข้อยกเว้น คุณจะเห็นว่า Message Processor แก้ไขชื่อโฮสต์
'input-prd.cloud.splunk.com'ที่ระบุไว้ในนโยบาย MessageLogging ไม่ได้หากต้องการยืนยัน ให้ลอง Telnet ไปยังชื่อโฮสต์และพอร์ต # ที่ใช้ในนโยบาย Message Logging
ตรวจสอบนโยบาย MessageLogging ในการแก้ไขที่เฉพาะเจาะจงของพร็อกซี API และยืนยันชื่อโฮสต์และพอร์ต # ที่ใช้ ในตัวอย่างด้านบน ชื่อพร็อกซี API คือ myapi และการแก้ไขคือ 42
นโยบาย MessageLogging
<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>Telnet ไปยังโฮสต์ที่มีพอร์ตที่เฉพาะเจาะจง ในตัวอย่างนี้ เราลอง Telnet และได้รับข้อผิดพลาดเดียวกันกับที่เห็นในบันทึกของ Message Processor
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
ซึ่งพิสูจน์ได้อย่างชัดเจนว่าระบบแก้ไขชื่อโฮสต์ไม่ได้
ความละเอียด
- แก้ไขนโยบาย MessageLogging เพื่อใช้ชื่อโฮสต์ที่ถูกต้อง
หากปัญหายังคงอยู่ ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม
สาเหตุ: ชื่อ KeyValueMap ไม่ถูกต้อง
การวินิจฉัย
ในบันทึกของ Message Processor หากคุณเห็นข้อยกเว้นที่มีข้อความ "KeyValueMap name is invalid" ระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือ Shared Flow ดังที่แสดงด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerมาดูตัวอย่างเพื่อทำความเข้าใจวิธีแก้ปัญหาและแก้ไขปัญหานี้
บันทึกของ Message Processor ตัวอย่าง ที่แสดงข้อยกเว้นที่มีข้อความ "KeyValueMap name is invalid" ซึ่งทำให้เกิดข้อผิดพลาดระหว่างการทำให้ใช้งานได้ของพร็อกซี 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]ข้อยกเว้นที่ 2 ด้านบนระบุว่าข้อผิดพลาดในการทำให้ใช้งานได้เกิดขึ้นสำหรับพร็อกซี API: CustomerAPI, การแก้ไข: 1
เมื่อตรวจสอบ Stacktrace คุณจะเห็นว่าระบบแสดงข้อผิดพลาดขณะดำเนินการนโยบาย KeyValuMapOperations
เมื่อดูบันเดิลพร็อกซี API คุณจะเห็นว่ามีนโยบาย KeyValuMapOperations 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>ดังที่เห็นด้านบน mapIdentifier ซึ่งระบุชื่อของ KeyValueMap มีสตริงว่างเปล่า ชื่อ KeyValueMap ต้องไม่ใช่สตริงว่างเปล่า ซึ่งเป็นสาเหตุของข้อผิดพลาดในการทำให้ใช้งานได้
ความละเอียด
- แก้ไขนโยบาย KeyValueMapOperations ให้มีชื่อที่ถูกต้องสำหรับ KeyValueMap
ในตัวอย่างด้านบน เราแก้ปัญหาโดยแก้ไข KeyValueMapOperations ให้มีชื่อ 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 และแจ้งข้อมูลที่รวบรวมไว้
เอาต์พุตของคำสั่ง
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>บันทึกของ Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.logรายละเอียดเกี่ยวกับส่วนต่างๆ ในเพลย์บุ๊กนี้ที่คุณได้ลองทำแล้ว รวมถึงข้อมูลเชิงลึกอื่นๆ ที่จะช่วยให้เราแก้ปัญหานี้ได้อย่างรวดเร็ว