private ErrorType createErrorType(ErrorModel errorModel, ComponentIdentifier identifier, ExtensionModel extensionModel) { final ErrorType errorType; if (identifier.getNamespace().equals(MULE)) { throw new MuleRuntimeException(createStaticMessage(format("The extension [%s] tried to register the [%s] error with [%s] namespace, which is not allowed.", extensionModel.getName(), identifier, MULE))); } if (errorModel.getParent().isPresent()) { errorType = errorTypeRepository.addErrorType(identifier, getErrorType(errorModel.getParent().get(), extensionModel)); } else { errorType = errorTypeRepository.addErrorType(identifier, null); } return errorType; }
@Test public void orphanErrorsUsesAnyAsParent() { extensionModel = loadExtension(HeisenbergWithOrphanErrors.class); ErrorModel errorModel = extensionModel.getErrorModels().stream().filter(error -> error.getType().equals("HEALTH")).findFirst().get(); assertThat(errorModel.getNamespace(), is(HEISENBERG)); Optional<ErrorModel> anyExtensionError = errorModel.getParent(); assertThat(anyExtensionError.isPresent(), is(true)); assertThat(anyExtensionError.get().getType(), is(ANY.getType())); assertThat(anyExtensionError.get().getNamespace(), is(MULE_NAMESPACE)); }
@Test public void extensionErrorsInheritFromMuleErrors() { extensionModel = loadExtension(HeisenbergExtension.class); OperationModel cureCancer = getNamedObject(extensionModel.getOperationModels(), "cureCancer"); assertThat(cureCancer.getErrorModels(), hasItem(hasProperty(TYPE, is(HEALTH.getType())))); Optional<ErrorModel> healthError = extensionModel.getErrorModels().stream() .filter(errorModel -> errorModel.getType().equals(HEALTH.getType())).findFirst(); assertThat(healthError.isPresent(), is(true)); Optional<ErrorModel> optConnectivityError = healthError.get().getParent(); assertThat(optConnectivityError.isPresent(), is(true)); ErrorModel connectivityError = optConnectivityError.get(); assertThat(connectivityError.getType(), is(CONNECTIVITY_ERROR_IDENTIFIER)); assertThat(connectivityError.getNamespace(), is(HEISENBERG)); Optional<ErrorModel> optMuleConnectivityError = connectivityError.getParent(); assertThat(optMuleConnectivityError.isPresent(), is(true)); ErrorModel muleConnectivityError = optMuleConnectivityError.get(); assertThat(muleConnectivityError.getType(), is(CONNECTIVITY_ERROR_IDENTIFIER)); assertThat(muleConnectivityError.getNamespace(), is(MULE_NAMESPACE)); }
private Set<ErrorModel> flatenizeErrors(Set<ErrorModel> errorModels) { Set<ErrorModel> models = new LinkedHashSet<>(); errorModels.forEach(model -> { models.add(model); Optional<ErrorModel> parent = model.getParent(); while (parent.isPresent()) { ErrorModel parentModel = parent.get(); models.add(parentModel); parent = parentModel.getParent(); } }); return models; }
private void writeError(JsonWriter out, ErrorModel errorModel) throws IOException { out.beginObject(); out.name(ERROR).value(serialize(errorModel)); if (errorModel.getParent().isPresent()) { out.name(PARENT).value(serialize(errorModel.getParent().get())); } out.name(HANDLEABLE).value(errorModel.isHandleable()); out.endObject(); }
private ErrorType createErrorType(ErrorModel errorModel, ComponentIdentifier identifier, ExtensionModel extensionModel) { final ErrorType errorType; if (identifier.getNamespace().equals(MULE)) { throw new MuleRuntimeException(createStaticMessage(format("The extension [%s] tried to register the [%s] error with [%s] namespace, which is not allowed.", extensionModel.getName(), identifier, MULE))); } if (errorModel.getParent().isPresent()) { errorType = errorTypeRepository.addErrorType(identifier, getErrorType(errorModel.getParent().get(), extensionModel)); } else { errorType = errorTypeRepository.addErrorType(identifier, null); } return errorType; }