Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-18698

Add support for multiple data types on components

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 4.0.0
    • camel-core
    • None
    • Unknown

    Description

      Each component consumes/produces input and output data when processing the exchange as part of the route. Usually a component reads data from the exchange message (body and header) as input and produces specific message content as an output.

      The input and output of a component can be of various nature (e.g. Java POJO objects, Json objects, String, binary data, InputStream, etc.)

      In order to simplify the interrelationship between components each component should allow well defined data types as input and output and provide basic transformation logic.

      Having the possibility to choose, a user can specify the format option on an endpoint URI in order to specify the requested data type. Each component defines a set of supported data types and provides logic to convert to and from this data type.

      from("kafka:topic?format=avro").to("aws2-s3:bucketName?format=string")

      The example above lets the user choose one of the supported input/output data formats on the components kafka and aws2-s3. The components may offer specific logic to transform from/to the defined data type. Also there will be generic data type transformation logic that Camel already provides when converting types via TypeConverter.

      The idea is to provide multiple supported data types for components and let the component automatically apply transformation logic to/from the data type that the user has chosen.

      On the one hand there is the transformation EIP and Camel provides powerful route DSL to perform transformations from one data type to another. But in many cases the component itself knows best how to transform from/to the domain model data type.

      This is especially useful when dealing with components that use Java POJO objects as input/output. This way the user is able to deal with more common data types (e.g. String, Json) instead of having to know the domain model of the individual component.

      In particular this would be beneficial for Camel K and Kamelets (also see the discussions in https://github.com/apache/camel-k/issues/1980) where declarative YAML DSL is used to specify the route logic. In these declarative use cases the usage of custom Java processors to transform from one data type to another is not easily possible. Instead the components itself should provide predefined data type support and offer multiple types that the user may choose from.

      Attachments

        Issue Links

          Activity

            People

              christophd Christoph Deppisch
              christophd Christoph Deppisch
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: