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 プロキシ エディタの [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"適切なレベル(API プロキシ、組織、または環境レベル)で 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 コードの問題
プライベート クラウド ユーザーのみの診断手順
診断
- 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"