バグを説明する
getByResourceGroupは、リソースがGallery、GalleryImage、またはGalleryImageVersionである場合に、NPEをスローします。 この関数を使用して、リソースが存在するかどうかを確認しています。
例外またはスタックトレース
java.lang.NullPointerException:null
com.microsoft.azure.management.compute.implementation.GalleryImageImplで。
com.microsoft.azure.management.compute.implementation.GalleryImagesImpl.wrapModel(GalleryImagesImpl.java:42)で
com.microsoft.azure.management.compute.implementation.GalleryImagesImpl.access $ 000(GalleryImagesImpl.java:24)で
com.microsoft.azure.management.compute.implementation.GalleryImagesImpl $ 4.call(GalleryImagesImpl.java:84)で
com.microsoft.azure.management.compute.implementation.GalleryImagesImpl $ 4.call(GalleryImagesImpl.java:81)で
rx.internal.operators.OnSubscribeMap $ MapSubscriber.onNext(OnSubscribeMap.java:69)で
rx.internal.operators.OnSubscribeMap $ MapSubscriber.onNext(OnSubscribeMap.java:77)で
rx.internal.operators.OperatorMerge $ MergeSubscriber.emitScalar(OperatorMerge.java:511)で
rx.internal.operators.OperatorMerge $ MergeSubscriber.tryEmit(OperatorMerge.java:466)で
rx.internal.operators.OperatorMerge $ MergeSubscriber.onNext(OperatorMerge.java:244)で
rx.internal.operators.OperatorMerge $ MergeSubscriber.onNext(OperatorMerge.java:148)で
rx.internal.operators.OnSubscribeMap $ MapSubscriber.onNext(OnSubscribeMap.java:77)で
retrofit2.adapter.rxjava.CallArbiter.deliverResponse(CallArbiter.java:120)で
retrofit2.adapter.rxjava.CallArbiter.emitResponse(CallArbiter.java:102)で
retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:46)で
retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)で
rx.Observable.unsafeSubscribe(Observable.java:10327)で
rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)で
rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)で
rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)で
rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)で
rx.Observable.unsafeSubscribe(Observable.java:10327)で
rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)で
rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)で
rx.Observable.unsafeSubscribe(Observable.java:10327)で
rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)で
rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)で
rx.Observable.unsafeSubscribe(Observable.java:10327)で
rx.internal.operators.DeferredScalarSubscriber.subscribeTo(DeferredScalarSubscriber.java:153)で
rx.internal.operators.OnSubscribeTakeLastOne.call(OnSubscribeTakeLastOne.java:32)で
rx.internal.operators.OnSubscribeTakeLastOne.call(OnSubscribeTakeLastOne.java:22)で
rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)で
rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)で
rx.Observable.subscribe(Observable.java:10423)で
rx.Observable.subscribe(Observable.java:10390)で
rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:443)で
rx.observables.BlockingObservable.last(BlockingObservable.java:226)で
com.microsoft.azure.management.compute.implementation.GalleryImagesImpl.getByGallery(GalleryImagesImpl.java:91)で
com.some.package.AzureClient.getGalleryImage(MyAzureClient.java:348)で
再現するには
以下のコードを使用して、ギャラリーが存在しないことを確認してください。
azure.galleries().getByResourceGroup(targetRg, galleryName);
コードスニペット
上記に追加。
予想される行動
nullを返し、コンシューマーが他のリソースタイプの場合と同じように動作できるようにする必要があります。
たとえば、パブリックIPアドレスに対して同じことを行うと、以下のコードはnullを出力します。
PublicIPAddress pubIp = azure.publicIPAddresses().getByResourceGroup(targetRg, "tempPip");
System.out.println("Public IP:" + pubIp);
スクリーンショット
該当なし
セットアップ(次の情報を入力してください):
追加のコンテキスト
ところで、以下のコードは、GalleryまたはGalleryImageのresourceIdを指定してnullを出力する場合は問題なく機能しますが、リソースグループ名とリソース名のみを操作する場合は理想的な回避策ではありません。
GenericResource genericResource = azure.genericResources().getById(sigResourceId);
System.out.println("Some resource:" + genericResource);
情報チェックリスト
上記のすべての情報を追加したことを確認し、必須フィールドをチェックしてください。そうしないと、発行者は不完全なレポートとして扱われます。
この問題を報告していただきありがとうございます。 Mgmt
プレーンSDKチームの誰かがまもなくフォローアップします。
/ cc @yungezz
@ Shanky2304これを報告していただきありがとうございます。 これを修正するためにPRを作成しました。 リリースされる前に、以下のコードを試してみてください。
azure.galleries().inner().getByResourceGroup(targetRg, galleryName);
@ Shanky2304これを報告していただきありがとうございます。 これを修正するためにPRを作成しました。 リリースされる前に、以下のコードを試してみてください。
azure.galleries().inner().getByResourceGroup(targetRg, galleryName);
こんにちは@ xccc-msft、
修正にはGalleryImagesImplとGalleryImageVersionsImplへの変更が含まれているようですが、GalleryImageとGalleryImageVersionをフェッチするときにも、この提案された変更を適用する必要がありますか?
@knspatavardhanはい