<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
ResourceDoesNotExist
오류 메시지
Edge UI 또는 Edge Management API를 통한 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.
오류 스크린샷 예시
원인
JavaCallback 정책의 <ResourceURL>
요소에 지정된 리소스가 API 프록시, 환경 또는 조직 수준에 없는 경우 API 프록시 배포가 실패합니다.
진단
환경 및 리소스 이름을 식별합니다. 이 정보는 오류 메시지에서 확인할 수 있습니다. 예를 들어 다음 오류에서 환경은
test
이고 <ResourceURL>
요소에 사용되는 리소스 이름은myresource.jar
입니다.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
위의 1단계에서 식별된 리소스를 사용하는 JavaCallout 정책을 확인합니다.
예를 들어 다음 정책은 오류 메시지의 값과 일치하는 <
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 프록시에 업로드된 리소스가 없습니다.
리소스는 환경 또는 조직 수준에서 사용할 수 있습니다. 자세한 내용은 리소스 파일을 참조하세요.
리소스가 환경 수준에서 존재하는지 확인하려면 curl을 사용하여 다음 API 호출을 실행합니다.
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
리소스가 조직 수준에 있는지 확인하려면 환경 세부정보를 생략하고 curl을 사용하여 다음 API 호출을 실행합니다.
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
이러한 API에 대한 응답으로 404 상태 코드를 받으면 조직 및 환경 수준에서 리소스가 누락된 것입니다.
API 프록시, 조직, 환경 수준에서 리소스를 사용할 수 없는 경우 배포 오류가 반환됩니다.
Resource with name myresource.jar and type java does not exist. ```
해상도
<ResourceURL>
요소에 지정된 리소스가 API 프록시, 환경 또는 조직 수준에 존재하는지 확인합니다. 자세한 내용은 리소스 파일을 참고하세요.
위에 나와 있는 Java콜아웃 정책 예를 수정하려면 적절한 수준 (API 프록시, 조직 또는 환경 수준)에서 JAR 파일을 업로드합니다.
NoResourceForURL
오류 메시지
Edge UI 또는 Edge Management API를 통한 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 프록시 수준에서 업로드되었음을 확인할 수 있습니다.리소스는 환경 또는 조직 수준에서 사용할 수 있습니다. 자세한 내용은 리소스 파일을 참조하세요.
리소스가 환경 수준에서 존재하는지 확인하려면 curl을 사용하여 다음 API 호출을 실행합니다.
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
리소스가 조직 수준에 있는지 확인하려면 환경 세부정보를 생략하고 curl을 사용하여 다음 API 호출을 실행합니다.
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
이러한 API에 대한 응답으로 404 상태 코드를 받으면 조직 및 환경 수준에서 리소스가 누락된 것입니다.
해상도
- 리소스가 API 프록시, 조직, 환경 수준에 있는 것으로 확인되면 2단계에 설명된 대로 리소스를 삭제하고 다시 업로드합니다. 그렇지 않으면 3단계로 건너뜁니다.
API 프록시 수준에서 리소스를 삭제하려면 API 프록시 편집기의 탐색기 창에 있는 리소스 탭으로 이동하여 아래와 같이 리소스 옆에 있는 'X' 버튼을 클릭합니다.
환경 또는 조직 수준에서 리소스를 삭제하려면 이전에 진단 단계에서 사용한 API 호출에서 DELETE 동사를 사용하세요. 예를 들어 환경 수준에서 리소스를 삭제하려면 다음 명령어를 입력합니다.
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
적절한 수준 (API 프록시, 조직 또는 환경 수준)으로 JAR 파일을 업로드합니다.
리소스를 다시 업로드해도 문제가 해결되지 않으면 영향을 받은 메시지 프로세서를 다시 시작해야 합니다. Cloud에서 Apigee Edge를 사용하는 경우 Apigee 지원팀에 문의하세요. 프라이빗 클라우드 사용자는 Apigee Edge의 시작, 중지, 다시 시작, 상태 확인을 참조하세요.
JavaCalloutInstantiationFailed
오류 메시지
Edge UI 또는 Edge Management API를 통한 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 파일이 업로드되지 않았습니다. |
손상된 JAR 파일 | 오류에서 식별된 자바 클래스를 포함하는 JAR 파일이 손상되었거나 부분적으로 업로드되었습니다. |
클래스 파일 누락 | 오류에서 식별된 자바 클래스 파일이 >ResourceURL< 또는 종속 JAR 파일에 지정된 JAR 파일의 일부가 아닙니다. |
자바 코드 문제 | 누락된 생성자, 코드 종속성 문제 등의 오류가 코드에 있습니다. |
일반 진단 단계
환경의 이름과 가져올 수 없는 클래스를 식별합니다. 예를 들어 다음 오류 메시지 환경 이름은
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 파일
진단
- 위 1단계에서 식별된 클래스를 포함해야 하며 인스턴스화할 수 없는 JAR 파일을 확인합니다.
- 특정 JAR 파일이 API 프록시, 조직 또는 환경 수준에서 업로드되었는지 확인합니다. JAR 파일이 어느 수준에도 업로드되지 않으면 해결 방법으로 이동합니다.
- JAR 파일이 업로드되면 원인: 손상된 JAR 파일로 이동합니다.
해상도
- JAR 파일이 손상되었거나 일부만 업로드된 경우 JAR을 다시 빌드하고 적절한 수준 (API 프록시, 조직 또는 환경 수준)에서 JAR 파일을 업로드합니다.
- API 프록시를 재배포합니다.
원인: 손상된 JAR 파일
진단
- 위 1단계에서 식별된 클래스를 포함해야 하며 인스턴스화할 수 없는 JAR 파일을 확인합니다.
- 특정 JAR 파일이 손상되었는지 확인합니다. 예를 들어 파일이 손상되었거나 부분적으로 업로드되어 압축을 풀 수 없는지 확인합니다. 손상된 경우 해결 방법으로 이동합니다.
- JAR 파일이 손상되지 않았다면 원인: 누락된 클래스 파일로 이동합니다.
해상도
- 손상된 JAR 파일을 다시 빌드하고 적절한 수준(API 프록시, 조직 또는 환경 수준)에서 JAR 파일을 업로드합니다.
- API 프록시를 재배포합니다.
원인: 누락된 클래스 파일
진단
- 위 1단계에서 식별된 특정 자바 클래스 파일이 >ResourceURL< 또는 종속 JAR 파일에 지정된 JAR 파일의 일부인지 확인합니다.
- 클래스 파일이 JAR 파일에 없으면 오류의 원인을 파악할 수 있습니다. 해결 방법으로 이동합니다.
- Java콜아웃 정책에 지정된 JAR 파일 중 하나에 클래스 파일이 있으면 Java 코드 또는 종속 클래스에 문제가 있을 경우 이 오류가 발생합니다. a. 퍼블릭 클라우드 사용자인 경우 Apigee 지원팀에 문의하세요. b. 프라이빗 클라우드 사용자인 경우 원인: Java 코드 문제로 이동합니다.
해상도
- 누락된 클래스 파일로 JAR을 다시 빌드하고 적절한 수준(API 프록시, 조직 또는 환경 수준)에서 JAR 파일을 업로드합니다.
- 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을 다시 빌드하고 적절한 수준(API 프록시, 조직 또는 환경 수준)에서 JAR 파일을 업로드합니다.
- API 프록시를 재배포합니다.
JAR 파일 업로드
필요한 모든 클래스가 있는 리소스 요소가 API 프록시, 환경 또는 조직 수준에 있는지 확인합니다. 자세한 내용은 리소스 파일을 참조하세요.
API 프록시 수준에서 리소스를 업로드하려면 리소스 탭에서 +(더하기 기호)를 클릭한 다음 파일 가져오기를 선택하고 로컬 머신에서 파일을 업로드합니다. 파일 이름은 >ResourceURL< 요소와 일치해야 하지만
java://
프리픽스는 없어야 합니다.동일한 환경에서 둘 이상의 API 프록시에 리소스를 사용할 수 있도록 하려면 환경에 리소스를 업로드합니다. 리소스 파일에 설명된 대로 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 프록시에 파일을 사용할 수 있도록 하려면 기본 경로에서 환경 세부정보를 생략하면 됩니다. 예를 들면 다음과 같습니다.
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"