คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ResourceDoesNotExist
ข้อความแสดงข้อผิดพลาด
การทำให้พร็อกซี API ใช้งานได้ผ่าน Edge UI หรือ Edge Management API จะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้
Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.
ตัวอย่างข้อความแสดงข้อผิดพลาด
Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.
ตัวอย่างภาพหน้าจอแสดงข้อผิดพลาด
สาเหตุ
หากไม่มีทรัพยากรที่ระบุในองค์ประกอบ <ResourceURL>
ในนโยบาย Javacallout ที่ระดับพร็อกซี สภาพแวดล้อม หรือองค์กร API การติดตั้งใช้งานพร็อกซี API จะล้มเหลว
การวินิจฉัย
ระบุสภาพแวดล้อมและชื่อทรัพยากร ซึ่งคุณจะเห็นข้อมูลนี้ในข้อความแสดงข้อผิดพลาด ตัวอย่างเช่น ในข้อผิดพลาดต่อไปนี้ สภาพแวดล้อมคือ
test
และชื่อทรัพยากรที่ใช้ในองค์ประกอบ <ResourceURL>
คือmyresource.jar
Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
กำหนดนโยบาย JavaCall ที่ใช้ทรัพยากรที่ระบุในขั้นตอนที่ 1 ด้านบน
ตัวอย่างเช่น นโยบายต่อไปนี้ระบุค่า <
ResourceURL>
เป็นmyresource.jar
ซึ่งจับคู่กับค่าในข้อความแสดงข้อผิดพลาด<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://myresource.jar</ResourceURL> </JavaCallout>
พิจารณาว่าทรัพยากรเป็นส่วนหนึ่งของพร็อกซี API ที่ล้มเหลวหรืออัปโหลดที่ระดับสภาพแวดล้อมหรือองค์กรหรือไม่ หากไม่ตรง นี่เป็นสาเหตุของข้อผิดพลาด
ไปที่แท็บทรัพยากรในแผงการนำทางของตัวแก้ไขพร็อกซี API เพื่อดูทรัพยากรทั้งหมดที่อัปโหลดในระดับพร็อกซี API ในตัวอย่างนี้ พร็อกซี API ไม่มีการอัปโหลดทรัพยากร
ทรัพยากรพร้อมใช้งานในระดับสภาพแวดล้อมหรือองค์กร ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ทรัพยากร
หากต้องการดูว่าทรัพยากรมีอยู่ที่ระดับสภาพแวดล้อมหรือไม่ ให้เรียก API ต่อไปนี้โดยใช้ curl
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
หากต้องการตรวจสอบว่าทรัพยากรอยู่ในระดับองค์กรหรือไม่ ให้เรียก API ต่อไปนี้โดยใช้ curl โดยละเว้นรายละเอียดสภาพแวดล้อม
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
หากคุณได้รับรหัสสถานะ 404 เป็นการตอบกลับสำหรับ API เหล่านี้ แสดงว่าทรัพยากรนั้นหายไปทั้งในระดับองค์กรและสภาพแวดล้อม
หากทรัพยากรไม่พร้อมใช้งานในพร็อกซี องค์กร และสภาพแวดล้อม API ระบบจะแสดงข้อผิดพลาดในการทำให้ใช้งานได้ ดังนี้
Resource with name myresource.jar and type java does not exist. ```
ความละเอียด
ตรวจสอบว่าทรัพยากรที่ระบุในองค์ประกอบ <ResourceURL>
ไม่มีอยู่ที่ระดับพร็อกซี สภาพแวดล้อม หรือองค์กร API ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ทรัพยากร
หากต้องการแก้ไขตัวอย่างนโยบาย JavaScript ที่แสดงด้านบน ให้อัปโหลดไฟล์ JAR ในระดับที่เหมาะสม (ระดับพร็อกซี API, องค์กร หรือสภาพแวดล้อม)
NoResourceForURL
ข้อความแสดงข้อผิดพลาด
การทำให้พร็อกซี API ใช้งานได้ผ่าน Edge UI หรือ Edge Management API จะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้
Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>
ตัวอย่างข้อความแสดงข้อผิดพลาด
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
ตัวอย่างภาพหน้าจอแสดงข้อผิดพลาด
สาเหตุ
ข้อผิดพลาดนี้อาจเกิดขึ้นหากไฟล์ทรัพยากรเสียหายหรืออัปโหลดเพียงบางส่วน แม้ว่าจะปรากฏอยู่ในพร็อกซี API, สภาพแวดล้อม หรือองค์กรก็ตาม
การวินิจฉัย
ระบุสภาพแวดล้อมและชื่อทรัพยากร ซึ่งคุณจะเห็นข้อมูลนี้ในข้อความแสดงข้อผิดพลาด ตัวอย่างเช่น ในข้อผิดพลาดต่อไปนี้ ชื่อสภาพแวดล้อมคือ
test
และชื่อทรัพยากรที่ใช้ในองค์ประกอบ <ResourceURL>
คือmyresource.jar
Error in deployment for environment test The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
ตรวจสอบว่าได้อัปโหลดทรัพยากรที่ระดับพร็อกซี สภาพแวดล้อม หรือองค์กร API แล้ว ในตัวอย่างด้านล่าง คุณจะเห็นว่าทรัพยากร
myresource.jar
ได้รับการอัปโหลดที่ระดับพร็อกซี APIทรัพยากรพร้อมใช้งานในระดับสภาพแวดล้อมหรือองค์กร ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ทรัพยากร
หากต้องการดูว่าทรัพยากรมีอยู่ที่ระดับสภาพแวดล้อมหรือไม่ ให้เรียก API ต่อไปนี้โดยใช้ curl
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
หากต้องการตรวจสอบว่าทรัพยากรอยู่ในระดับองค์กรหรือไม่ ให้เรียก API ต่อไปนี้โดยใช้ curl โดยละเว้นรายละเอียดสภาพแวดล้อม
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
หากคุณได้รับรหัสสถานะ 404 เป็นการตอบกลับสำหรับ API เหล่านี้ แสดงว่าทรัพยากรนั้นหายไปทั้งในระดับองค์กรและสภาพแวดล้อม
ความละเอียด
- หากคุณพิจารณาว่าทรัพยากรอยู่ในพร็อกซี องค์กร หรือสภาพแวดล้อม API ให้ลบทรัพยากรนั้นแล้วอัปโหลดอีกครั้งตามที่อธิบายไว้ในขั้นตอนที่ 2 ไม่เช่นนั้น ให้ข้ามไปยังขั้นตอนที่ 3
หากต้องการลบทรัพยากรในระดับพร็อกซี API ให้ไปที่แท็บทรัพยากรในแผงการนำทางของตัวแก้ไขพร็อกซี API และคลิกปุ่ม "X" ข้างทรัพยากรดังที่แสดงด้านล่าง
หากต้องการลบทรัพยากรที่ระดับสภาพแวดล้อมหรือองค์กร ให้ใช้กริยา "ลบ" ในการเรียก API ที่ใช้ก่อนหน้านี้ในขั้นตอนการวิเคราะห์ เช่น หากต้องการลบทรัพยากรในระดับสภาพแวดล้อม ให้ป้อนคำสั่งต่อไปนี้
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
อัปโหลดไฟล์ JAR) ในระดับที่เหมาะสม (ระดับพร็อกซี API, องค์กร หรือสภาพแวดล้อม
หากการอัปโหลดทรัพยากรอีกครั้งไม่ได้ผล คุณต้องรีสตาร์ทโปรแกรมประมวลผลข้อความที่ได้รับผลกระทบ หากคุณใช้ Apigee Edge ใน Cloud โปรดติดต่อทีมสนับสนุนของ Apigee หากคุณเป็นผู้ใช้ Private Cloud โปรดดูการเริ่มต้น การหยุด การรีสตาร์ท และสถานะของ Apigee Edge
JavaCalloutInstantiationFailed
ข้อความแสดงข้อผิดพลาด
การทำให้พร็อกซี API ใช้งานได้ผ่าน Edge UI หรือ Edge Management API จะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้
Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>
หรือ
Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>
ตัวอย่างข้อความแสดงข้อผิดพลาด
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
ตัวอย่างภาพหน้าจอแสดงข้อผิดพลาด
สาเหตุ
สาเหตุทั่วไปของข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย |
ไม่มีไฟล์ JAR | ระบบจะไม่อัปโหลดไฟล์ JAR ที่มีคลาส Java ที่ระบุในข้อผิดพลาด |
ไฟล์ JAR เสียหาย | ไฟล์ JAR ที่มีคลาส Java ที่ระบุในข้อผิดพลาดเสียหาย/อัปโหลดบางส่วน |
ไม่มีไฟล์ของชั้นเรียน | ไฟล์คลาส Java ที่ระบุในข้อผิดพลาดไม่ได้เป็นส่วนหนึ่งของไฟล์ JAR ที่ระบุใน >ResourceURL< หรือไฟล์ JAR ที่เกี่ยวข้อง |
ปัญหาเกี่ยวกับโค้ด Java | มีข้อผิดพลาดในโค้ด เช่น ตัวสร้างขาดหายไป ปัญหาทรัพยากร Dependency ของโค้ด หรือปัญหาอื่นๆ |
ขั้นตอนการวินิจฉัยทั่วไป
ระบุชื่อของสภาพแวดล้อมและคลาสที่นำเข้าไม่สำเร็จ ตัวอย่างเช่น ชื่อสภาพแวดล้อมของข้อความแสดงข้อผิดพลาดต่อไปนี้คือ
test
และชื่อชั้นเรียนคือmy.class
Error in deployment for environment test The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
สาเหตุ: ไม่มีไฟล์ JAR
การวินิจฉัย
- ระบุไฟล์ JAR ที่ควรจะมีคลาส (ระบุในขั้นตอนที่ 1 ด้านบน) และไม่สามารถสร้างอินสแตนซ์ได้
- ตรวจสอบว่าได้อัปโหลดไฟล์ JAR ที่เฉพาะเจาะจงที่ระดับพร็อกซี องค์กร หรือสภาพแวดล้อมของ API หรือไม่ หากยังไม่ได้อัปโหลดไฟล์ JAR ไปยังระดับใดระดับหนึ่ง ให้ไปที่ "ความละเอียด"
- หากอัปโหลดไฟล์ JAR แล้ว ให้ไปที่สาเหตุ: ไฟล์ JAR ที่เสียหาย
ความละเอียด
- หากไฟล์ JAR เสียหายหรืออัปโหลดเป็นบางส่วน ให้สร้าง JAR อีกครั้งและอัปโหลดไฟล์ JAR ในระดับที่เหมาะสม (ระดับพร็อกซี API, องค์กร หรือสภาพแวดล้อม)
- ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
สาเหตุ: ไฟล์ JAR เสียหาย
การวินิจฉัย
- ระบุไฟล์ JAR ที่ควรจะมีคลาส (ระบุในขั้นตอนที่ 1 ด้านบน) ที่ไม่สามารถสร้างอินสแตนซ์ได้
- ตรวจสอบว่าไฟล์ JAR บางไฟล์เสียหายหรือไม่ เช่น หากเปิดไฟล์ไม่ได้เนื่องจากไฟล์เสียหายหรือมีการอัปโหลดเป็นบางส่วน หากเสียหาย ให้ไปที่ "การแก้ปัญหา"
- หากไฟล์ JAR ไม่เสียหาย ให้ไปที่สาเหตุ: ไฟล์ของชั้นเรียนขาดหายไป
ความละเอียด
- สร้างไฟล์ JAR ที่เสียหายอีกครั้งและอัปโหลดไฟล์ JAR) ในระดับที่เหมาะสม (ระดับพร็อกซี API, องค์กร หรือสภาพแวดล้อม
- ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
สาเหตุ: ไม่มีไฟล์ของชั้นเรียน
การวินิจฉัย
- ตรวจสอบว่าไฟล์คลาสของ Java เฉพาะ (ระบุในขั้นตอนที่ 1 ด้านบน) เป็นส่วนหนึ่งของไฟล์ JAR ที่ระบุใน >ResourceURL< หรือไม่ หรือไฟล์ JAR ใดๆ ที่เกี่ยวข้อง
- หากไม่มีไฟล์คลาสอยู่ในไฟล์ JAR แสดงว่าคุณสามารถหาสาเหตุของข้อผิดพลาดได้ ไปที่ "ความละเอียด"
- หากไฟล์คลาสอยู่ในไฟล์ JAR ไฟล์ใดไฟล์หนึ่งที่ระบุในนโยบาย Javacallout จะทำให้เกิดปัญหากับโค้ด Java หรือคลาสอ้างอิงที่ทำให้เกิดข้อผิดพลาดนี้ ก. หากคุณเป็นผู้ใช้ Public Cloud โปรดติดต่อทีมสนับสนุนของ Apigee ข. หากคุณเป็นผู้ใช้ Private Cloud ให้ไปยังหัวข้อสาเหตุ: ปัญหาโค้ด Java
ความละเอียด
- สร้าง JAR อีกครั้งด้วยไฟล์คลาสที่หายไป แล้วอัปโหลดไฟล์ JAR ในระดับที่เหมาะสม (ระดับพร็อกซี API, องค์กร หรือสภาพแวดล้อม)
- ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
สาเหตุ: ปัญหาเกี่ยวกับโค้ด Java
ขั้นตอนการวินิจฉัยสำหรับผู้ใช้ Private Cloud เท่านั้น
การวินิจฉัย
- ตรวจสอบบันทึกโปรแกรมประมวลผลข้อความ (
/opt/apigee/var/log/edge-message-processor/system.log
และ/opt/apigee/var/log/edge-message-processor/configurations.log
) คุณอาจเห็นข้อยกเว้นที่คล้ายกับตัวอย่างด้านล่าง
2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {} com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name> at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116) at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218) …<snipped> Caused by: java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126) ... 42 common frames omitted Caused by: <Reason> ...<snipped>
อ่านข้อยกเว้นอย่างละเอียดเพื่อทำความเข้าใจสาเหตุของความล้มเหลว โดยปกติแล้ว ข้อผิดพลาดนี้อาจทำให้เกิดปัญหาบางอย่างในโค้ด Java
ความละเอียด
- คุณอาจต้องแก้ไขปัญหาในโค้ด Java ทั้งนี้ขึ้นอยู่กับสาเหตุของความล้มเหลว
- สร้าง JAR อีกครั้งด้วยไฟล์คลาสที่หายไป แล้วอัปโหลดไฟล์ JAR ในระดับที่เหมาะสม (ระดับพร็อกซี API, องค์กร หรือสภาพแวดล้อม)
- ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
อัปโหลดไฟล์ JAR
ตรวจสอบว่าองค์ประกอบทรัพยากรที่มีคลาสที่จำเป็นทั้งหมดอยู่ที่พร็อกซี API, สภาพแวดล้อม หรือองค์กร ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ทรัพยากร
หากต้องการอัปโหลดทรัพยากรในระดับพร็อกซี API ให้คลิก + (เครื่องหมายบวก) ในแท็บทรัพยากร จากนั้นเลือกนำเข้าไฟล์ แล้วอัปโหลดไฟล์จากเครื่องของคุณ ชื่อไฟล์ควรตรงกับ >ResourceURL< แต่ไม่มีคำนำหน้า
java://
หากต้องการให้ทรัพยากรพร้อมใช้งานสำหรับพร็อกซี API มากกว่า 1 รายการในสภาพแวดล้อมเดียวกัน ให้อัปโหลดทรัพยากรไปยังสภาพแวดล้อม คุณจะต้องใช้ Edge API ตามที่อธิบายไว้ในไฟล์ทรัพยากร
เช่น ป้อนการเรียก API ต่อไปนี้จากเครื่องภายในเพื่ออัปโหลดไฟล์ที่ระบุที่ระดับสภาพแวดล้อม
curl -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"
ออกการเรียก API จากไดเรกทอรีเดียวกับไฟล์
หากต้องการทำให้ไฟล์พร้อมใช้งานสำหรับพร็อกซี API ทั้งหมดภายในสภาพแวดล้อมทั้งหมดในองค์กร คุณสามารถละเว้นรายละเอียดสภาพแวดล้อมใน Basepath เช่น
curl -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"