Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
ResourceDoesNotExist
Thông báo Lỗi
Thông báo lỗi sau không triển khai được proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge:
Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.
Ví dụ về thông báo lỗi
Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.
Ví dụ về ảnh chụp màn hình báo lỗi
Nguyên nhân
Nếu tài nguyên được chỉ định trong phần tử <ResourceURL>
trong chính sách JavaAnnotation không tồn tại ở cấp độ proxy API, môi trường hoặc tổ chức, thì việc triển khai proxy API sẽ không thành công.
Chẩn đoán
Xác định tên môi trường và tài nguyên. Bạn có thể tìm thấy thông tin này trong thông báo lỗi. Ví dụ: trong lỗi sau, môi trường là
test
và tên tài nguyên dùng trong phần tử <ResourceURL>
làmyresource.jar
.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
Xác định chính sách Chú thích Java đang sử dụng tài nguyên đã xác định trong bước 1 ở trên.
Ví dụ: chính sách sau đây chỉ định giá trị <
ResourceURL>
thànhmyresource.jar
, khớp với giá trị trong thông báo lỗi:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://myresource.jar</ResourceURL> </JavaCallout>
Xác định xem tài nguyên có phải là một phần của proxy API bị lỗi hoặc được tải lên ở cấp độ môi trường hoặc tổ chức hay không. Nếu không thì đây là nguyên nhân gây ra lỗi.
Chuyển đến thẻ Tài nguyên trong ngăn Điều hướng của trình chỉnh sửa proxy API để xem tất cả các tài nguyên được tải lên ở cấp độ proxy API. Trong ví dụ này, proxy API không có tài nguyên nào được tải lên.
Tài nguyên có thể được cung cấp ở cấp độ môi trường hoặc tổ chức. Để biết thêm thông tin, hãy xem phần Tệp tài nguyên.
Để xác định xem tài nguyên có tồn tại ở cấp môi trường hay không, hãy thực hiện lệnh gọi API sau đây bằng curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Để xác định xem tài nguyên có tồn tại ở cấp tổ chức hay không, hãy thực hiện lệnh gọi API sau bằng cách sử dụng curl, bỏ qua các thông tin chi tiết về môi trường:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Nếu bạn nhận được mã trạng thái 404 làm phản hồi cho các API này, tức là tài nguyên bị thiếu ở cả cấp tổ chức và cấp môi trường.
Nếu tài nguyên không có ở cấp proxy API, tổ chức và môi trường, thì lỗi triển khai sẽ được trả về:
Resource with name myresource.jar and type java does not exist. ```
Độ phân giải
Đảm bảo rằng tài nguyên được chỉ định trong phần tử <ResourceURL>
tồn tại ở cấp proxy API, môi trường hoặc tổ chức. Để biết thêm thông tin, hãy xem phần Tệp tài nguyên.
Để sửa chính sách JavaAnnotation mẫu nêu trên, hãy tải tệp JAR lên ở cấp thích hợp (cấp API proxy, tổ chức hoặc môi trường).
NoResourceForURL
Thông báo Lỗi
Thông báo lỗi sau không triển khai được proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge:
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>
Ví dụ về thông báo lỗi
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
Ví dụ về ảnh chụp màn hình báo lỗi
Nguyên nhân
Lỗi này có thể xảy ra nếu tệp tài nguyên bị hỏng hoặc được tải lên một phần, mặc dù tệp dường như tồn tại ở cấp độ proxy API, môi trường hoặc tổ chức.
Chẩn đoán
Xác định môi trường và tên tài nguyên. Bạn có thể tìm thấy thông tin này trong thông báo lỗi. Ví dụ: trong lỗi sau, tên môi trường là
test
và Tên tài nguyên dùng trong phần tử <ResourceURL>
là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
Đảm bảo rằng tài nguyên được tải lên ở cấp độ proxy API, môi trường hoặc tổ chức. Trong ví dụ bên dưới, bạn có thể thấy tài nguyên
myresource.jar
được tải lên ở cấp proxy API.Tài nguyên có thể được cung cấp ở cấp độ môi trường hoặc tổ chức. Để biết thêm thông tin, hãy xem phần Tệp tài nguyên.
Để xác định xem tài nguyên có tồn tại ở cấp môi trường hay không, hãy thực hiện lệnh gọi API sau đây bằng curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Để xác định xem tài nguyên có tồn tại ở cấp tổ chức hay không, hãy thực hiện lệnh gọi API sau bằng cách sử dụng curl, bỏ qua thông tin chi tiết về môi trường:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Nếu bạn nhận được mã trạng thái 404 làm phản hồi cho các API này, tức là tài nguyên bị thiếu ở cả cấp tổ chức và cấp môi trường.
Độ phân giải
- Nếu bạn xác định rằng tài nguyên tồn tại ở cấp proxy API, tổ chức hoặc môi trường, hãy xoá tài nguyên rồi tải lên lại, như mô tả trong bước 2. Nếu không, hãy chuyển sang bước 3.
Để xoá tài nguyên ở cấp độ proxy API, hãy điều hướng đến thẻ Tài nguyên trong ngăn Điều hướng của trình chỉnh sửa proxy API và nhấp vào nút “X” bên cạnh tài nguyên như minh hoạ dưới đây.
Để xoá tài nguyên ở cấp môi trường hoặc tổ chức, hãy dùng động từ DELETE trên các lệnh gọi API đã dùng trước đó trong các bước chẩn đoán. Ví dụ: để xoá tài nguyên ở cấp môi trường, hãy nhập lệnh sau:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Tải tệp JAR lên) ở cấp phù hợp (cấp độ API, tổ chức hoặc môi trường).
Nếu việc tải tài nguyên lên lại không hiệu quả, thì bạn cần khởi động lại các Trình xử lý thư bị ảnh hưởng. Nếu bạn đang sử dụng Apigee Edge trong Cloud, hãy liên hệ với Nhóm hỗ trợ Apigee. Nếu bạn là người dùng Cloud riêng tư, hãy xem bài viết Bắt đầu, dừng, khởi động lại và kiểm tra trạng thái của Apigee Edge.
JavaCalloutInstantiationFailed
Thông báo Lỗi
Thông báo lỗi sau không triển khai được proxy API thông qua giao diện người dùng Edge hoặc API quản lý Edge:
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>
Hoặc
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>
Ví dụ về thông báo lỗi
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
Ví dụ về ảnh chụp màn hình báo lỗi
Nguyên nhân
Sau đây là một số nguyên nhân thường gây ra lỗi này
Nguyên nhân | Nội dung mô tả |
Thiếu tệp JAR | Tệp JAR chứa lớp Java được xác định trong lỗi không được tải lên. |
Tệp JAR bị lỗi | Tệp JAR chứa lớp Java được xác định trong lỗi bị hỏng/được tải lên một phần. |
Thiếu tệp Lớp | Tệp lớp Java được xác định trong lỗi không thuộc tệp JAR được chỉ định trong >ResourceURL< hoặc tệp JAR phụ thuộc. |
Vấn đề về mã Java | Đã xảy ra lỗi trong mã, chẳng hạn như thiếu hàm khởi tạo, vấn đề về phần phụ thuộc mã hoặc các vấn đề khác. |
Bước chẩn đoán thông thường
Xác định tên của môi trường và Lớp không nhập được. Ví dụ: trong môi trường thông báo lỗi sau, tên môi trường là
test
và Tên lớp làmy.class
:Error in deployment for environment test The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
Nguyên nhân: Thiếu tệp JAR
Chẩn đoán
- Xác định tệp JAR được cho là chứa lớp (được xác định ở bước #1 ở trên) và không thể tạo thực thể.
- Kiểm tra xem tệp JAR cụ thể có được tải lên ở cấp proxy API, tổ chức hoặc môi trường hay không. Nếu bạn không tải tệp JAR lên bất kỳ cấp độ nào, hãy chuyển đến phần Độ phân giải.
- Nếu bạn đã tải tệp JAR lên, hãy xem phần Nguyên nhân: Tệp JAR bị hỏng.
Độ phân giải
- Nếu tệp JAR bị lỗi hoặc được tải lên một phần, hãy tạo lại tệp JAR và tải tệp JAR lên ở cấp độ phù hợp (cấp độ API API, tổ chức hoặc môi trường).
- Triển khai lại proxy API.
Nguyên nhân: Tệp JAR bị hỏng
Chẩn đoán
- Xác định tệp JAR được cho là chứa lớp (được xác định ở bước #1 ở trên) không thể tạo thực thể.
- Kiểm tra xem tệp JAR cụ thể có bị lỗi hay không. Ví dụ: nếu bạn không thể gỡ tệp đính kèm vì tệp bị hỏng hoặc được tải lên một phần. Nếu mã bị hỏng, hãy chuyển đến phần Độ phân giải.
- Nếu tệp JAR không bị lỗi, hãy truy cập vào Nguyên nhân: Thiếu tệp lớp.
Độ phân giải
- Tạo lại(các) tệp JAR bị hỏng và tải tệp JAR lên) ở cấp độ thích hợp (cấp độ API proxy, tổ chức hoặc môi trường).
- Triển khai lại proxy API.
Nguyên nhân: Thiếu tệp lớp
Chẩn đoán
- Kiểm tra xem tệp lớp Java cụ thể (đã xác định ở bước 1 ở trên) có phải là một phần của tệp JAR được chỉ định trong >ResourceURL< hoặc bất kỳ tệp JAR phụ thuộc nào.
- Nếu tệp lớp này không tồn tại trong bất kỳ tệp JAR nào, tức là bạn đã xác định được nguyên nhân gây ra lỗi. Chuyển đến mục Độ phân giải.
- Nếu tệp lớp tồn tại ở một trong các tệp JAR được chỉ định trong chính sách JavaAnnotation, thì phải có vấn đề với mã Java hoặc lớp phụ thuộc dẫn đến lỗi này. a. Nếu bạn là người dùng Đám mây công cộng, hãy liên hệ với Nhóm hỗ trợ Apigee. b. Nếu bạn là người dùng Đám mây riêng tư, hãy chuyển sang phần Nguyên nhân: Vấn đề về mã Java.
Độ phân giải
- Tạo lại tệp JAR bằng(các) tệp lớp bị thiếu và tải tệp JAR lên ở cấp độ phù hợp (cấp độ API proxy, tổ chức hoặc môi trường).
- Triển khai lại Proxy API.
Nguyên nhân: Vấn đề về mã Java
Các bước chẩn đoán chỉ dành cho người dùng dịch vụ đám mây riêng tư
Chẩn đoán
- Kiểm tra nhật ký Trình xử lý thư (
/opt/apigee/var/log/edge-message-processor/system.log
và/opt/apigee/var/log/edge-message-processor/configurations.log
). Bạn có thể thấy một trường hợp ngoại lệ tương tự như ví dụ bên dưới:
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>
Đọc kỹ trường hợp ngoại lệ để hiểu lý do không thành công. Thông thường, điều này có thể cho thấy một số vấn đề trong mã Java của bạn.
Độ phân giải
- Tuỳ thuộc vào nguyên nhân gây ra lỗi, bạn có thể phải khắc phục vấn đề trong mã Java.
- Tạo lại tệp JAR bằng(các) tệp lớp bị thiếu và tải tệp JAR lên ở cấp độ phù hợp (cấp độ API proxy, tổ chức hoặc môi trường).
- Triển khai lại Proxy API.
Tải tệp JAR lên
Đảm bảo rằng phần tử tài nguyên có tất cả các lớp cần thiết đều tồn tại ở cấp Proxy API, môi trường hoặc tổ chức. Để biết thêm thông tin, hãy xem phần Tệp tài nguyên.
Để tải lên tài nguyên ở cấp proxy API, hãy nhấp vào dấu + (dấu cộng) trên tab Tài nguyên, sau đó chọn Nhập tệp và tải tệp lên từ máy cục bộ của bạn. Tên tệp phải khớp với >ResourceURL< nhưng không có tiền tố
java://
.Nếu bạn muốn một tài nguyên khả dụng cho nhiều proxy API trong cùng một môi trường, hãy tải tài nguyên lên môi trường đó. Bạn cần sử dụng Edge API theo mô tả trong phần Tệp tài nguyên.
Ví dụ: nhập lệnh gọi API sau đây từ máy cục bộ để tải tệp được chỉ định lên ở cấp môi trường:
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"
Thực hiện lệnh gọi API từ cùng thư mục với tệp.
Để cung cấp tệp cho tất cả proxy API trong tất cả môi trường trong tổ chức, bạn có thể bỏ qua thông tin chi tiết về môi trường trong đường dẫn cơ sở. Ví dụ:
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"