private boolean hasStaticMetadataDefined(ConnectableComponentModel model, MediaType mediaTypeFromModelProperty) { if (mediaTypeFromModelProperty == null) { return hasCustomStaticMetadataDefined(model.getOutput()) || !hasJavaAsMetadataFormat(model.getOutput()); } else { return hasCustomStaticMetadataDefined(model.getOutput()) || modelMediaTypeDiffersFromMediaType(model.getOutput(), mediaTypeFromModelProperty); } }
private void collectReturnTypes(ConnectableComponentModel model) { exportedClasses.addAll(collectRelativeClassesAsString(model.getOutput().getType())); exportedClasses.addAll(collectRelativeClassesAsString(model.getOutputAttributes().getType())); }
void assertExpectedOutput(ConnectableComponentModel model, MetadataType payloadType, MetadataType attributesType) { assertExpectedOutput(model.getOutput(), model.getOutputAttributes(), payloadType, attributesType); }
private void validateMediaType(ConnectableComponentModel model, Optional<MetadataType> outputType) { MetadataType outputMetadataType = outputType.orElse(model.getOutput().getType());
private void validateMetadataOutputAttributes(ConnectableComponentModel component, MetadataResolverFactory resolverFactory, ProblemsReporter problemsReporter) { if (isVoid(component.getOutputAttributes().getType()) && !(resolverFactory.getOutputAttributesResolver() instanceof NullMetadataResolver) && (!isCollection(component.getOutput().getType()))) { problemsReporter .addError(new Problem(component, format("%s '%s' has an AttributesTypeResolver defined but it doesn't declare any attributes as part of its output.", capitalize(getComponentModelTypeName(component)), component.getName()))); } }
private void checkValidType(ConnectableComponentModel componentModel, ExtensionModel extensionModel, MetadataType metadataType, ProblemsReporter problemsReporter) { String componentTypeName = getComponentModelTypeName(componentModel); getType(metadataType).ifPresent(type -> { String declarationMessageModifier = ""; MetadataType modelType = componentModel.getOutput().getType(); if (modelType instanceof ArrayType) { declarationMessageModifier = "a collection of "; } else if (modelType instanceof ObjectType && ((ObjectType) modelType).isOpen()) { declarationMessageModifier = "a map of "; } if (Object.class.equals(type)) { problemsReporter.addError(new Problem(extensionModel, format("%s '%s' declares %s'%s' as its return type. Components that return a type " + "such as Object or Map (or a collection of any of those) must have defined an OutputResolver", capitalize(componentTypeName), componentModel.getName(), declarationMessageModifier, type))); } else if (isInvalidInterface(metadataType, type)) { problemsReporter.addError(new Problem(extensionModel, format("%s '%s' declares %s'%s' as its return type. Components that return an interface " + "(or a collection of interfaces) must have defined an OutputResolver", capitalize(componentTypeName), componentModel.getName(), declarationMessageModifier, type))); } }); }
void assertExpectedOutput(ConnectableComponentModel model, MetadataType payloadType, Type attributesType) { assertExpectedOutput(model.getOutput(), model.getOutputAttributes(), payloadType, TYPE_LOADER.load(attributesType)); }
private void validateMetadataReturnType(ExtensionModel extensionModel, ConnectableComponentModel component, ProblemsReporter problemsReporter) { if (!shouldValidateComponentOutputMetadata(component)) { return; } OutputTypeResolver<Object> outputResolver = getMetadataResolverFactory(component).getOutputResolver(); MetadataType modelOutputType = component.getOutput().getType(); if (outputResolver instanceof NullMetadataResolver) { validateNoOutputResolverIsNeeded(extensionModel, component, problemsReporter, modelOutputType); } else if (extensionModel.getModelProperty(CompileTimeModelProperty.class).isPresent()) { // TODO MULE-14517: Validations for types added since 4.1.1, so we need to keep backwards compatibility somehow for now. validateVoidOperationsDontDeclareOutputResolver(component, problemsReporter, outputResolver, modelOutputType); } }
void assertExpectedOutput(ConnectableComponentModel model, Type payloadType, Type attributesType) { assertExpectedOutput(model.getOutput(), model.getOutputAttributes(), TYPE_LOADER.load(payloadType), TYPE_LOADER.load(attributesType)); }
@Before public void before() throws MuleException { streamingManager = new DefaultStreamingManager(); LifecycleUtils.initialiseIfNeeded(streamingManager, muleContext); event = eventBuilder(muleContext).message(Message.builder().value("").attributesValue(attributes).build()).build(); when(outputModel.getType()).thenReturn(BaseTypeBuilder.create(JAVA).voidType().build()); when(outputModel.getModelProperty(any())).thenReturn(empty()); when(outputModel.getModelProperties()).thenReturn(emptySet()); when(outputModel.getDescription()).thenReturn(""); when(componentModel.getModelProperty(MediaTypeModelProperty.class)).thenReturn(empty()); when(componentModel.getOutput()).thenReturn(outputModel); delegate = createReturnDelegate(); when(operationContext.getEvent()).thenReturn(event); when(operationContext.getMuleContext()).thenReturn(muleContext); when(operationContext.getComponentModel()).thenReturn(componentModel); when(operationContext.getVariable(contains(CONNECTION_PARAM))).thenReturn(connectionHandler); }
private void collectReturnTypes(ConnectableComponentModel model) { exportedClasses.addAll(collectRelativeClassesAsString(model.getOutput().getType())); exportedClasses.addAll(collectRelativeClassesAsString(model.getOutputAttributes().getType())); }
private void validateMetadataReturnType(ExtensionModel extensionModel, ConnectableComponentModel component, ProblemsReporter problemsReporter) { if (!shouldValidateComponentOutputMetadata(component)) { return; } if (MuleExtensionUtils.getMetadataResolverFactory(component).getOutputResolver() instanceof NullMetadataResolver) { component.getOutput().getType().accept(new MetadataTypeVisitor() { @Override public void visitObject(ObjectType objectType) { if (!isCustomStaticType(objectType)) { objectType.getOpenRestriction().ifPresent(t -> checkValidType(component, extensionModel, t, problemsReporter)); checkValidType(component, extensionModel, objectType, problemsReporter); } } @Override public void visitArrayType(ArrayType arrayType) { arrayType.getType().accept(this); } }); } }
void assertExpectedOutput(ConnectableComponentModel model, MetadataType payloadType, MetadataType attributesType) { assertExpectedOutput(model.getOutput(), model.getOutputAttributes(), payloadType, attributesType); }
void assertExpectedOutput(ConnectableComponentModel model, MetadataType payloadType, Type attributesType) { assertExpectedOutput(model.getOutput(), model.getOutputAttributes(), payloadType, TYPE_LOADER.load(attributesType)); }
private void validateMetadataOutputAttributes(ConnectableComponentModel component, MetadataResolverFactory resolverFactory, ProblemsReporter problemsReporter) { if (isVoid(component.getOutputAttributes().getType()) && !(resolverFactory.getOutputAttributesResolver() instanceof NullMetadataResolver) && (!isCollection(component.getOutput().getType()))) { problemsReporter.addError(new Problem(component, String .format("%s '%s' has an attributes metadata resolver defined but it doesn't set any attributes", getComponentModelTypeName(component), component.getName()))); } }
void assertExpectedOutput(ConnectableComponentModel model, Type payloadType, Type attributesType) { assertExpectedOutput(model.getOutput(), model.getOutputAttributes(), TYPE_LOADER.load(payloadType), TYPE_LOADER.load(attributesType)); }