CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-wso2-siddhi--siddhi-annotations

Annotation support for the Siddhi Complex Event Processing Engine, providing extension definitions and validation for stream processors, functions, aggregations, and other extension types.

Overview
Eval results
Files

annotation-processors.mddocs/

Annotation Processors

Compile-time validation framework that ensures extension annotations comply with Siddhi's requirements. The processor system validates all annotation elements, enforces naming conventions, and provides specialized validation rules for different extension types.

Capabilities

SiddhiAnnotationProcessor

The main annotation processor that orchestrates validation for all Siddhi extension annotations during compilation.

/**
 * The annotation processor for siddhi extension annotation validation.
 * Validates @Extension, @Parameter, @ReturnAttribute, @SystemParameter and @Example annotations.
 * 
 * Extends javax.annotation.processing.AbstractProcessor
 */
public class SiddhiAnnotationProcessor extends AbstractProcessor {
    
    /**
     * Initialize the processor with the processing environment.
     * 
     * @param env - Processing environment providing access to facilities
     */
    public synchronized void init(ProcessingEnvironment env);
    
    /**
     * Process annotations found in the current compilation round.
     * 
     * @param annotations - Set of annotation types to process
     * @param roundEnv - Environment for information about the current round
     * @return false - This processor only validates, doesn't claim annotations
     */
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv);
    
    /**
     * Get the set of annotation types supported by this processor.
     * 
     * @return Set of supported annotation type names
     */
    public Set<String> getSupportedAnnotationTypes();
    
    /**
     * Get the latest source version supported by this processor.
     * 
     * @return SourceVersion.RELEASE_8
     */
    public SourceVersion getSupportedSourceVersion();
    
    /**
     * Report a build error with a message and element context.
     * 
     * @param message - Error message to display
     * @param element - Source element where error occurred
     */
    public void showBuildError(String message, Element element);
}

Supported Extension Types:

  • Sink extensions
  • SinkMapper extensions
  • Source extensions
  • SourceMapper extensions
  • FunctionExecutor extensions
  • AggregationAttribute extensions
  • StreamProcessor extensions
  • StreamFunctionProcessor extensions
  • WindowProcessor extensions
  • Store extensions
  • DistributionStrategy extensions
  • Script extensions
  • IncrementalAggregationAttribute extensions

AbstractAnnotationProcessor

Base class providing common validation logic and patterns for all extension-specific processors.

/**
 * Parent class for extension annotation validation processors.
 * Provides common validation patterns and regex-based validation rules.
 */
public abstract class AbstractAnnotationProcessor {
    
    /** Regex pattern for validating core package names */
    protected static final Pattern CORE_PACKAGE_PATTERN; // ^org.wso2.siddhi.core.
    
    /** Regex pattern for validating parameter names in dot notation */
    protected static final Pattern PARAMETER_NAME_PATTERN; // ^[a-z][a-z0-9]*(\\.[a-z][a-z0-9]*)*$
    
    /** Regex pattern for validating camelCase naming convention */
    protected static final Pattern CAMEL_CASE_PATTERN; // ^(([a-z][a-z0-9]+)([A-Z]{0,1}[a-z0-9]*)*)$
    
    /** Full name of the extension class being validated */
    protected String extensionClassFullName;
    
    /**
     * Constructor for annotation processor.
     * 
     * @param extensionClassFullName - Full name of extension class
     */
    public AbstractAnnotationProcessor(String extensionClassFullName);
    
    /**
     * Basic @Extension annotation elements validation.
     * 
     * @param name - Extension name to validate
     * @param description - Extension description to validate  
     * @param namespace - Extension namespace to validate
     * @throws AnnotationValidationException - When validation rules are violated
     */
    public void basicParameterValidation(String name, String description, String namespace) 
            throws AnnotationValidationException;
    
    /**
     * Validate @Extension parameter definitions.
     * 
     * @param parameters - Parameter array to validate
     * @throws AnnotationValidationException - When validation rules are violated
     */
    public void parameterValidation(Parameter[] parameters) throws AnnotationValidationException;
    
    /**
     * Validate @Extension return attribute definitions.
     * 
     * @param returnAttributes - Return attributes array to validate
     * @throws AnnotationValidationException - When validation rules are violated
     */
    public void returnAttributesValidation(ReturnAttribute[] returnAttributes) 
            throws AnnotationValidationException;
    
    /**
     * Validate @Extension system parameter definitions.
     * 
     * @param systemParameters - System parameters array to validate
     * @throws AnnotationValidationException - When validation rules are violated
     */
    public void systemParametersValidation(SystemParameter[] systemParameters) 
            throws AnnotationValidationException;
    
    /**
     * Validate @Extension example definitions.
     * 
     * @param examples - Examples array to validate
     * @throws AnnotationValidationException - When validation rules are violated
     */
    public void examplesValidation(Example[] examples) throws AnnotationValidationException;
}

Extension-Specific Processors

Specialized processors that extend AbstractAnnotationProcessor with custom validation logic for specific extension types.

FunctionExecutorValidationAnnotationProcessor

/**
 * Validation processor for Function Executor extensions.
 * Enforces function-specific rules including single return attribute and no dynamic parameters.
 */
public class FunctionExecutorValidationAnnotationProcessor extends AbstractAnnotationProcessor {
    
    public FunctionExecutorValidationAnnotationProcessor(String extensionClassFullName);
    
    /**
     * Override parameter validation to disallow dynamic parameters.
     * Dynamic parameters are only allowed for Sink and SinkMapper extensions.
     */
    @Override
    public void parameterValidation(Parameter[] parameters) throws AnnotationValidationException;
    
    /**
     * Override return attribute validation to enforce single return attribute with empty name.
     * Function executors must have exactly one return attribute without a name.
     */
    @Override
    public void returnAttributesValidation(ReturnAttribute[] returnAttributes) 
            throws AnnotationValidationException;
}

Other Specialized Processors

/**
 * Validation processors for specific extension types, each with custom rules:
 */

// Sink extensions
public class SinkValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// SinkMapper extensions  
public class SinkMapperValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// Source extensions
public class SourceValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// SourceMapper extensions
public class SourceMapperValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// AggregationAttribute extensions
public class AggregationAttributeValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// StreamProcessor extensions
public class StreamProcessorValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// StreamFunctionProcessor extensions
public class StreamFunctionProcessorValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// WindowProcessor extensions
public class WindowProcessorValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// Store extensions
public class StoreValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// DistributionStrategy extensions
public class DistributionStrategyValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// Script extensions
public class ScriptValidationAnnotationProcessor extends AbstractAnnotationProcessor;

// IncrementalAggregationAttribute extensions
public class IncrementalAggregationAttributeValidationAnnotationProcessor extends AbstractAnnotationProcessor;

Usage Examples

Annotation Processor Registration

The processors are automatically registered through the Java annotation processing mechanism:

META-INF/services/javax.annotation.processing.Processor:

org.wso2.siddhi.annotation.processor.SiddhiAnnotationProcessor
org.atteo.classindex.processor.ClassIndexProcessor

Compilation Integration

The processors run automatically during compilation when the siddhi-annotations JAR is on the classpath:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <!-- Processors run automatically unless disabled -->
        <compilerArgument>-proc:none</compilerArgument> <!-- To disable -->
    </configuration>
</plugin>

Validation Error Examples

Missing Extension Name:

The @Extension -> name annotated in class com.example.MyExtension is null or empty.

Invalid Parameter Name Format:

The @Extension -> @Parameter -> name 'InvalidName' annotated in class com.example.MyExtension is not in proper format 'abc.def.ghi'.

Function Executor with Multiple Return Attributes:

Only one @Extension -> @ReturnAttribute can be annotated in class com.example.MyFunction.

Dynamic Parameter in Non-Sink Extension:

The @Extension -> @Parameter -> name:param -> dynamic property cannot be true annotated in class com.example.MyProcessor. Only classes extending Sink and SinkMapper can have dynamic parameters.

Validation Flow

  1. Discovery: SiddhiAnnotationProcessor discovers all @Extension annotated classes
  2. Superclass Matching: Determines which specialized processor to use based on extension superclass
  3. Basic Validation: Validates extension name, description, namespace
  4. Element Validation: Validates parameters, return attributes, system parameters, examples
  5. Type-Specific Rules: Applies extension-type-specific validation rules
  6. Error Reporting: Reports compilation errors for any validation failures

The validation ensures that all Siddhi extensions are properly defined and can be safely loaded and used by the Siddhi runtime engine.

Install with Tessl CLI

npx tessl i tessl/maven-org-wso2-siddhi--siddhi-annotations

docs

annotation-processors.md

core-annotations.md

index.md

utility-classes.md

tile.json