From fce3d8bfd73d339a9da1062edd02f01350358389 Mon Sep 17 00:00:00 2001 From: Theresa Kamerman Date: Fri, 7 Jun 2024 16:46:02 -0700 Subject: [PATCH] Add Handler for `MissionModelLoadFailure`s to `MerlinBindings` - Remove unthrown exception from `getActivityTypes` --- .../merlin/server/http/MerlinBindings.java | 21 +++++++++++++++++++ .../services/LocalMissionModelService.java | 5 +---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/MerlinBindings.java b/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/MerlinBindings.java index 1d45f90867..9f82696a64 100644 --- a/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/MerlinBindings.java +++ b/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/MerlinBindings.java @@ -12,6 +12,7 @@ import gov.nasa.jpl.aerie.merlin.server.models.PlanId; import gov.nasa.jpl.aerie.merlin.server.services.GenerateConstraintsLibAction; import gov.nasa.jpl.aerie.merlin.server.services.GetSimulationResultsAction; +import gov.nasa.jpl.aerie.merlin.server.services.LocalMissionModelService; import gov.nasa.jpl.aerie.merlin.server.services.MissionModelService; import gov.nasa.jpl.aerie.merlin.server.services.PlanService; import gov.nasa.jpl.aerie.permissions.Action; @@ -126,6 +127,8 @@ private void postRefreshModelParameters(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); } catch (final MissionModelService.NoSuchMissionModelException ex) { ctx.status(404).result(ResponseSerializers.serializeNoSuchMissionModelException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -140,6 +143,8 @@ private void postRefreshActivityTypes(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); } catch (final MissionModelService.NoSuchMissionModelException ex) { ctx.status(404).result(ResponseSerializers.serializeNoSuchMissionModelException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -154,6 +159,8 @@ private void postRefreshResourceTypes(Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); } catch (final MissionModelService.NoSuchMissionModelException ex) { ctx.status(404).result(ResponseSerializers.serializeNoSuchMissionModelException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -171,6 +178,8 @@ private void getResourceTypes(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); } catch (final MissionModelService.NoSuchMissionModelException ex) { ctx.status(404).result(ResponseSerializers.serializeNoSuchMissionModelException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -286,6 +295,8 @@ private void validateActivityArguments(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidJsonException(ex).toString()); } catch (final InvalidEntityException ex) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -307,6 +318,8 @@ private void validateModelArguments(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidJsonException(ex).toString()); } catch (final InvalidEntityException ex) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -329,6 +342,8 @@ private void validatePlan(final Context ctx) { ctx.status(404).result(ResponseSerializers.serializeNoSuchPlanException(ex).toString()); } catch (final MissionModelService.NoSuchMissionModelException ex) { ctx.status(404).result(ResponseSerializers.serializeNoSuchMissionModelException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -348,6 +363,8 @@ private void getModelEffectiveArguments(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidJsonException(ex).toString()); } catch (final InvalidEntityException ex) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -373,6 +390,8 @@ private void getActivityEffectiveArguments(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidJsonException(ex).toString()); } catch (final InvalidEntityException ex) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } @@ -391,6 +410,8 @@ private void getActivityEffectiveArgumentsBulk(final Context ctx) { ctx.status(400).result(ResponseSerializers.serializeInvalidJsonException(ex).toString()); } catch (final InvalidEntityException ex) { ctx.status(400).result(ResponseSerializers.serializeInvalidEntityException(ex).toString()); + } catch (final LocalMissionModelService.MissionModelLoadException ex) { + ctx.status(400).result(ResponseSerializers.serializeMissionModelLoadException(ex).toString()); } } diff --git a/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/services/LocalMissionModelService.java b/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/services/LocalMissionModelService.java index 6c1c2b4c65..9f85ad3080 100644 --- a/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/services/LocalMissionModelService.java +++ b/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/services/LocalMissionModelService.java @@ -16,7 +16,6 @@ import gov.nasa.jpl.aerie.merlin.protocol.types.ValueSchema; import gov.nasa.jpl.aerie.merlin.server.models.ActivityDirectiveForValidation; import gov.nasa.jpl.aerie.merlin.server.models.ActivityType; -import gov.nasa.jpl.aerie.merlin.server.models.Constraint; import gov.nasa.jpl.aerie.merlin.server.models.MissionModelId; import gov.nasa.jpl.aerie.merlin.server.models.MissionModelJar; import gov.nasa.jpl.aerie.merlin.server.remotes.MissionModelRepository; @@ -95,12 +94,10 @@ public Map getResourceSchemas(final String missionModelId) * @param missionModelId The ID of the mission model to load. * @return The set of all activity types in the named mission model, indexed by name. * @throws NoSuchMissionModelException If no mission model is known by the given ID. - * @throws MissionModelLoadException If the mission model cannot be loaded -- the JAR may be invalid, or the mission model - * it contains may not abide by the expected contract at load time. */ @Override public Map getActivityTypes(final String missionModelId) - throws NoSuchMissionModelException, MissionModelLoadException + throws NoSuchMissionModelException { try { return missionModelRepository.getActivityTypes(missionModelId);