現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
ResourceDoesNotExist
エラー メッセージ
Edge UI または Edge 管理 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.
エラーのスクリーンショットの例
原因
JavaCallout ポリシーの <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 プロキシ エディタの [Navigator] ペインで [Resources] タブに移動すると、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 プロキシ、環境、または組織レベルで存在していることを確認します。詳細については、リソース ファイルをご覧ください。
上記の JavaCallout ポリシーの例を修正するには、適切なレベル(API プロキシ、組織、または環境レベル)で JAR ファイルをアップロードします。
NoResourceForURL
エラー メッセージ
Edge UI または Edge 管理 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 プロキシ エディタの [Navigator] ペインで [Resources] タブに移動し、以下のようにリソースの横にある [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"
JAR ファイルをアップロードします。
リソースを再アップロードしても問題が解決しない場合は、該当する Message Processor を再起動する必要があります。Cloud で Apigee Edge を使用している場合は、Apigee サポートにお問い合わせください。Private Cloud ユーザーの場合は、Apigee Edge の起動、停止、再起動、ステータスの確認をご覧ください。
JavaCalloutInstantiationFailed
エラー メッセージ
Edge UI または Edge 管理 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 ファイルがない | エラーで特定された Java クラスを含む JAR ファイルがアップロードされていません。 |
破損した JAR ファイル | エラーで特定された Java クラスを含む JAR ファイルが破損しているか、部分的にアップロードされています。 |
クラスファイルがない | エラーで特定された Java クラスファイルが、>ResourceURL< または依存 JAR ファイルで指定された JAR ファイルに含まれていません。 |
Java コードの問題 | コンストラクタがない、コードの依存関係の問題など、コードに関するエラーがあります。 |
一般的な診断手順
環境名とインポートに失敗したクラスを特定します。たとえば、次のエラー メッセージでは、環境名は
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 プロキシを再デプロイします。
原因: クラスファイルがない
診断
- 特定の Java クラスファイル(上記のステップ 1 で特定)が、>ResourceURL< または依存 JAR ファイルのいずれかで指定された JAR ファイルに含まれているかどうかを確認します。
- クラスファイルがどの JAR ファイルにも存在しない場合、これがエラーの原因であると判断します。解決策に進みます。
- クラスファイルが JavaCallout ポリシーで指定された JAR ファイルのいずれかに存在する場合は、このエラーを引き起こしている Java コードまたは依存クラスに問題がある必要があります。 a.Public Cloud をご利用の場合は、Apigee サポートにご連絡ください。b.Private Cloud をご利用の場合は、「原因: Java コードの問題」に進みます。
解像度
- 欠落しているクラスファイルを含む JAR を再ビルドし、適切なレベル(API プロキシ、組織、環境レベル)で JAR ファイルをアップロードします。
- API プロキシを再デプロイします。
原因: Java コードの問題
Private Cloud ユーザー専用の診断手順
診断
- Message Processor のログ(
/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 プロキシレベルでリソースをアップロードするには、[Resources] タブで +(プラス記号)をクリックして、[Import file] を選択し、ローカルマシンからファイルをアップロードします。ファイル名は >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"